SED는 행을 삭제하지 않습니다.

SED는 행을 삭제하지 않습니다.

0sed가 마지막 열에 포함된 행을 삭제할 수 없는 이유를 알려줄 수 있는 사람이 있나요? 다음을 사용했지만 아무것도 작동하지 않는 것 같습니다.

sed "/0/d"
sed "/ 0 /d"
sed "/\t0\n/d"
sed "/0\n/d"

산출:

 93000000       95       95       3328   0
 99000000       96       96       3206   0
 99000000       96       96       3210   0
 99000000       96       96       3215   0
 99000000       96       96       3224   0
 99000000       96       96       3230   0
 99000000       96       96       3236   0
 99000000       96       96       3268   0
 99000000       96       96       3292   0
 99000000       96       96       3459   0
 591000000      85       85       2      2 CDL (control)
 321000000      40       40       109    4.2 COZI-TV
 585000000      84       84       8      8 NJTV
 585000000      84       84       8134   10 WTBY
 543000000      77       77       710    10.1 WLNY-10
 585000000      84       84       62     12 N12WC
 657000000      101      101      1014   14 OPTCH

답변1

모든 줄이 유효하기 때문에 \nin(또는 시도한 다른 항목)과 줄바꿈을 일치시킬 수 없습니다 . 따라서 생각하는 줄바꿈은 작업 범위를 벗어납니다. 당신이 찾고 있는 것은 줄 끝과 일치하는 특수 연산자입니다.sedsed$

sed -e '/0$/d'

답변2

만약 너라면아니요또한 로 끝나는 줄을 제거하려면 WLNY-10Even보다 좀 더 구체적이어야 합니다 /0$/.

sed -r '/\s0$/d' file

또는 GNU sed를 사용할 수 없는 경우

sed '/[[:space:]]0$/d' file

심지어

awk '$NF!=0' file

답변3

0마지막 열에 포함된 행을 삭제하려면 다음을 시도해 보세요.

$ sed '/0$/d' file
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH

솔루션이 실패하는 이유는 다음과 같습니다.

  • sed "/0/d": /0/일치하는 줄이 0어디에나 포함되어 있으므로 모든 입력 줄이 제거됨을 의미합니다.

  • sed "/ 0 /d": / 0 /일치하는 줄의 0앞뒤에 공백이 있음을 나타냅니다. 입력이 일치하지 않기 때문에 아무 작업도 수행되지 않습니다.

  • sed "/\t0\n/d"그리고 sed "/0\n/d"잘못된 정규식을 사용했기 때문에 일치하지 않습니다.

결론적으로, 0마지막 열의 일치를 위해서는 자세한 내용을 보려면 /0$/.man sedregular expression

고쳐 쓰다

@steeldriver의 답변을 바탕으로 다음으로 끝나는 숫자가 포함된 줄을 유지하도록 답변을 업데이트했습니다 0.

$ sed '/ 0$/d' cat
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
543000000      77       77       710    10.1 WLNY-10
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH

답변4

또 다른 awk명령은,

$ awk '$NF==0 {next;}1' file
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
543000000      77       77       710    10.1 WLNY-10
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH

관련 정보