次のようなファイルがあるとしましょう。
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
入力文字列を複数の文字列に分割します。awk
2桁の数字で終わるすべての文字列と一致します。