
次のようなファイルがあるとします。
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 つの数字で終わるすべての文字列に一致します。