programing

일치하는 줄 뒤에서 시작하여 파일의 모든 줄을 삭제하려면 어떻게 해야 합니까?

iphone6s 2023. 6. 1. 22:31
반응형

일치하는 줄 뒤에서 시작하여 파일의 모든 줄을 삭제하려면 어떻게 해야 합니까?

여러 줄의 텍스트로 구성된 파일이 있습니다.

The first line
The second line
The third line
The fourth line

줄 중 하나인 문자열이 있습니다.The second line

파일에서 문자열과 뒤에 있는 모든 행을 삭제하려고 합니다. 그러면 삭제됩니다.The third line그리고.The fourth line현에 더하여.파일은 다음과 같습니다.

The first line

구글에서 해결책을 찾아봤는데, 사용해야 할 것 같습니다.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옵션(암묵적 인쇄는 사용되지 않음).

자세한 내용은 maned를 참조하십시오.

이것은 다른 주어진 솔루션보다 약간 짧습니다.대문자 Q 사용을 중지하면 현재 행이 인쇄되지 않습니다.

 sed '/The second line/Q' file

실제로 행을 삭제하려면 동일한 구문을 사용할 수 있습니다.

 sed -i '/The second line/Q' file

awk 사용(일치된 선이 표시되지 않음)

awk '/pattern/ {exit} {print}' file.txt
sed '/The second line/q0' file

또는 ngus 없이:

sed '/The second line/q' file

또는 grep 사용:

grep -B 9999999 "The second line"

먼저 라인 번호를 추가하고 라인을 삭제합니다.

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 'NR!=3 && NR!=4' new.txt 
The first line
The second line
awk '/The second line/{exit}1' file

언급URL : https://stackoverflow.com/questions/5227295/how-do-i-delete-all-lines-in-a-file-starting-from-after-a-matching-line

반응형