grep と sed のコマンド

grep と sed のコマンド

次のようなファイルがあるとします。

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

sed最後の 2 文字が数字で、grepおよびを含む文字列のみを検索しますawk

答え1

grep と sed のコマンド

元の質問のフォーマットが間違っていたようです。したがって、最も単純な grep および sed コマンドは次のとおりです。

egrep '[0-9]{2}$' /path/to/file

そして

sed -rn '/[0-9]{2}$/p' /path/to/file

以下に説明を残しておきますが、これにはこれらのコマンドに関する情報が含まれていますが、1 行に複数の文字列を記述する場合にも機能します。これらは引き続き機能しますが、余分なコードが含まれる可能性があります。


グレップ

grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file

説明

  • [^ ]*任意の数のスペース以外の文字と一致します。
  • [0-9]\{2\}2 つの数字を一致させます。([0-9][0-9]代わりに を使用することもできます。)
  • ( |$)数字は「単語」の終わりである必要があるため、その後にスペースまたは行末終端文字が続く必要があります。

中括弧をエスケープする必要がないので、拡張grepを使用することをお勧めします。したがって、

grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file

または

egrep '[^ ]*[0-9]{2}( |$)' /path/to/file

質問は編集されましたが、1行に複数の一致があり、一致のみを出力したい場合は、フラグを使用します-o。つまり、

egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file

セド

</path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p'

説明

  • </path/to/file tr ' ' '\n'ファイルを入力し、すべてのスペースを改行に変更します。
  • sed -rnでは拡張正規表現 (上記と同様) を使用し-r、 ではすべての出力をすぐに印刷しません-n
  • [0-9]{2}$この正規表現は、上記の grep 行の正規表現に似ています。ただし、すでにすべてのスペースを削除しているため、先頭のスペース以外の文字や末尾のスペースを定義する必要はありません。
  • /<regex>/p一致する行を出力します<regex>

答え2

sedプラスすればawkうまくいくはずです!

sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/'

もしファイルにこれらの文字列が含まれています1行ずつ awkそれだけでうまくいくはずです!

awk '/[0-9][0-9]$/' file1

もしで終わる文字列に一致させたい正確に2つの数字とそれ以上場合は、代わりに次のコマンドを使用します。

sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/'

そして

awk '/[^0-9][0-9][0-9]$/' file1

出力:

adasfddfd09
dsassd90897
sdddsdf56 

説明

  • sed入力文字列を複数の文字列に分割します。
  • awkちょうど 2 つの数字で終わるすべての文字列に一致します。

関連情報