3

私はbashを初めて使用し、これを理解するのに苦労しています。

を使用sedして、特定のファイルで偶数のみを検索するのを手伝ってくれる人はいますか?

これを使用して、[0,2,4,6,8]から始まるすべての数字を見つける方法を見つけました。

sed -n 's/^[0-9]*[02468] /&/w even' <file 

しかし、これは数が確実であることを保証するものではありません。

一致した番号が[0,2,4,6,8]で終わっているかどうかを確認するのに問題があり、確実に一致します。

それで、誰かがこれで私を助けることができますか?

4

4 に答える 4

1

すべての偶数の後にスペースがあり、それらがすべて行の先頭にあると仮定すると、コマンドは正常に機能するはずです。

$ echo 'foo 
1231 
2220 
1254 ' | sed -n '/[0-9]*[02468] /p'
2220 
1254 

また、実際には置換を行わないため、sコマンドは必要ないことに注意してください。アドレス (パターン) 指定子とwコマンドを使用します (上記のpコマンドで行ったように)。

偶数桁が最後であるが、必ずしもスペースが続くとは限らないことを確認するには、次のようなことができます

$ echo 'foo
1231
2220
1254 ' | sed -n '/[0-9]*[02468]\($\|[^0-9]\)/p'
2220
1254 

実際、編集ではなくフィルタリングを行うため、あなたのケースはgrepではなくのユースケースのように見えます。あなたができるように、sedすべてがより簡単になりますGNU grep

$ echo 'foo
1231
2220
1254 ' | grep -P '\d*[02468](?!\d)'
2220
1254 

コマンドに追加> evenするだけで、ファイルに書き込むことができますeven

于 2012-12-07T09:27:52.390 に答える
1

あなたの正規表現は少し奇妙に見え、何をしたいのかわかりませんが、これは役立つはずです:

sed -r -n 's/^[0-9]*?[02468] /even/g'

-r拡張正規表現を有効に*?し、非貪欲にし/g、ファイル内のすべての行に対してグローバルに置換を実行します。

于 2012-12-07T08:27:30.917 に答える
1
$ cat file
1
2
3
498
57
12345678
$ awk '$0%2' file
1
3
57
$ awk '!($0%2)' file
2
498
12345678
于 2012-12-07T14:14:21.513 に答える
0

[02468] で終わる番号を見つけてみませんか?

于 2012-12-07T08:26:46.730 に答える