Grepは0で終わる行を除外しますが、10、100などは除外します。

Grepは0で終わる行を除外しますが、10、100などは除外します。

LinuxとUnix環境の両方にこのパターンのファイルがあります。

# file1
text1   98432230
text2    123412
text3        10
line4         0
line5         0
line6     40000
...         ...
line10       20
...         ... 

で終わる行を除外しようとしますが0、などで終わる行は除外しようとします10204000098432230

|grep -v "\0$"、、、、をテストしましたが、10、20、40000、および98432230を含むゼロで終わる行を除外するため、それらのいずれも機能しませ| grep -v "[[:space:]]0$"ん。| grep -v " 0"| sed '/0/d'| sed "/0$/d"

どんな提案がありますか?

答え1

使用するgrep代わりにawk

$ awk '$NF!=0' file
text1   98432230
text2    123412
text3        10
line6     40000
...         ...
line10       20
...         ... 

awk変数NFsはフィールド数$NFで、最後のフィールドも同じです。 true と評価される式は「この行印刷」を意味するため、「最後のフィールドがゼロ以外のすべての行$NF!=0印刷」を意味します。

これをさらに簡素化して、次のこともできます。

awk '$NF' file

答え2

grep の場合、3 つの点、つまり数字以外の文字と行末に「0」が続く正規表現が必要です。

grep -v '[^0-9]0$'

また、2つのゼロで終わるすべての行を一致させて削除しますか00

答え3

完全な「単語」と言えるように、ゼロを一致させる必要があります。

grep -vw '0$'-v「単語」0で終わる行だけが一致して除外されます。

答え4

使用幸せ(以前のPerl_6)

raku -ne '.put if .grep( none / \D 0 $/ );'    

Rakuのルーチンは上記で使用されましたgrep。正規表現の原子は\D数字ではありません。このルーチンは、none正規表現の一致をテストするRakuの結合点を利用します。put無条件に返すと、if一致するものがない空の行を含む元のファイルが返されます。

入力例:

text1  98432230
text2    123412
text3        10
line4         0
line5         0
line6     40000
line10       20

出力例:

text1  98432230
text2    123412
text3        10
line6     40000
line10       20

TMTOWTDI:この場合、交換しgrepて使用すると match同じ収益が発生します。のmatch(/…/)ように簡単に書くこともできm/…/nonegrep/match 演算子の内部は!以下のように前のものと置き換えることができます。 (洞察力/ディスカッションを提供したBruce Grayに特別な感謝を申し上げます):

raku -ne '.put if .match( none / \D 0 $/ );' 

#OR

raku -ne '.put if  ! .match( / \D 0 $/ );'  

#OR

raku -ne '.put if  ! m/ \D 0 $/;'  

https://docs.raku.org/routine/none
https://docs.raku.org/routine/grep
https://raku.org

関連情報