0
sed가 마지막 열에 포함된 행을 삭제할 수 없는 이유를 알려줄 수 있는 사람이 있나요? 다음을 사용했지만 아무것도 작동하지 않는 것 같습니다.
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
모든 줄이 유효하기 때문에 \n
in(또는 시도한 다른 항목)과 줄바꿈을 일치시킬 수 없습니다 . 따라서 생각하는 줄바꿈은 작업 범위를 벗어납니다. 당신이 찾고 있는 것은 줄 끝과 일치하는 특수 연산자입니다.sed
sed
$
sed -e '/0$/d'
답변2
만약 너라면아니요또한 로 끝나는 줄을 제거하려면 WLNY-10
Even보다 좀 더 구체적이어야 합니다 /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 sed
regular 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