여러 줄의 텍스트로 구성된 파일이 있습니다.
The first line
The second line
The third line
The fourth line
줄 중 하나 인 문자열이 있습니다. The second line
파일에서 문자열과 그 뒤의 모든 줄을 삭제하고 싶습니다. 그래서 문자열 The third line
과 The fourth line
함께 삭제됩니다 . 파일은 다음과 같습니다.
The first line
Google에서 해결책을 찾았는데 sed
. 다음과 같은 것 :
sed 'linenum,$d' file
그러나 문자열의 줄 번호를 찾는 방법은 무엇입니까? 아니면 어떻게해야합니까?
답변
일치하는 줄 (또는 다음 줄)을 인쇄하지 않으려면 :
sed -n '/The second line/q;p' inputfile
이것은 “패턴과 일치하는 줄에 도달하면 종료하고 그렇지 않으면 각 줄을 인쇄합니다”라고 말합니다. 이 -n
옵션은 암시 적 인쇄를 방지하며 p
명령은 명시 적으로 행을 인쇄하는 데 필요합니다.
또는
sed '/The second line/,$d' inputfile
이것은 “일치하는 행에서 시작하여 파일 끝까지 계속되는 출력에서 모든 행을 삭제합니다”라고 말합니다.
하지만 첫 번째는 더 빠릅니다. 그러나 처리가 완전히 종료되므로 인수로 여러 파일이있는 경우 첫 번째 일치 파일 이후의 파일은 처리되지 않습니다. 이 경우 삭제 양식이 더 좋습니다.
일치하는 행을 인쇄하고 싶지만 다음 행은 인쇄하지 않으려는 경우 :
sed '/The second line/q' inputfile
이것은 “모든 행을 인쇄하고 일치하는 행에 도달하면 종료”( -n
옵션 (암시 적 인쇄 없음)가 사용되지 않음) 라고 말합니다 .
추가 정보는 man sed 를 참조하십시오 .
답변
이것은 다른 주어진 솔루션보다 약간 짧습니다. 대문자 Q를 사용하여 종료하면 현재 행이 인쇄되지 않습니다.
sed '/The second line/Q' file
실제로 행을 삭제하려면 동일한 구문을 사용할 수 있습니다.
sed -i '/The second line/Q' file
답변
sed '/The second line/q0' file
또는 gnu sed없이 :
sed '/The second line/q' file
또는 grep 사용 :
grep -B 9999999 "The second line"
답변
awk 사용 (일치하는 줄을 표시하지 않음)
awk '/pattern/ {exit} {print}' file.txt
답변
먼저 줄 번호를 추가하고 줄을 삭제하십시오.
cat new.txt
The first line
The second line
The third line
The fourth line
cat new.txt | nl
1 The first line
2 The second line
3 The third line
4 The fourth line
cat new.txt | nl | sed "/2/d"
1 The first line
3 The third line
4 The fourth line
cat new.txt | nl |sed "3d;4d"
1 The first line
2 The second line
awk 사용
awk 'NR!=3 && NR!=4' new.txt
The first line
The second line
답변
awk '/The second line/{exit}1' file