sed - 일치하지 않는 모든 줄을 삭제하는 방법

sed - 일치하지 않는 모든 줄을 삭제하는 방법

HTML 파일이 있습니다. 이 작업을 수행하는 모든 줄을 제거하고 싶습니다.아니요로 시작하세요 <tr>.

나는 시도했다:

cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'

그러나 모든 행을 삭제합니다.

답변1

GNU sed를 사용하여 이것을 시도해 보세요:

sed -n '/^<tr>/p' file

또는

sed '/^<tr>/!d' file

답변2

sed -e '/^<tr>/d'

그 사이의 부분은 /정규 표현식입니다. 이 d명령은 일치하는 줄을 삭제합니다.

업데이트: 이런, 안 된다고 말씀하신 걸 보니 죄송합니다. 그래서

sed -e '/^<tr>/!d'

이는 !게임의 의미를 부정합니다.

답변3

다음과 같은 경우 sed:

sed -ni '/^<tr>/p' file

-i-n모든 줄이 인쇄되지 않도록 파일을 내부에서 편집하세요 sed. 정규식은 ^( )로 시작하는 모든 줄 과 일치 <tr>하고 해당 줄 ( p)이 인쇄됨을 의미합니다.

그리고 grep:

grep -E '^<tr>' file

-E확장 정규식을 해석하려면 grep을 사용하세요 .

그리고 awk:

awk '/^<tr>/' file

또는 순수 bash:

while IFS= read -r l; do [[ "$l" =~ ^\<tr\> ]] && echo $l; done <file

[[bash 내부 조건식 입니다 . $l정규식과 비교하고 성공하면 ( ) &&행을 인쇄합니다 echo.

답변4

가장 간단하고 간단한 대답은 다음과 같습니다.

grep '^<tr>' path/to/file 

이는 파일을 직접 수정하고 싶지 않은 경우(sed에서와 같이) 다음 줄로 시작하는 파일만 인쇄하는 것이 좋을 수 있습니다.

그런 다음 출력 결과가 마음에 들면 파일로 인쇄할 수 있습니다.> file

이 경우 특정 명령을 시도하기 전에 파일을 백업하면 시간을 절약할 수 있습니다.

관련 정보