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

関連情報