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