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

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]$/'

もしファイルには次の文字列が含まれています。一行ずつ 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入力文字列を複数の文字列に分割します。
  • awk2桁の数字で終わるすべての文字列と一致します。

関連情報