すべての数字、すべての文字、および文字を含む行を含む大きなテキストファイルがあり、ここには数字、文字、および文字を含む行も含まれています。最後または最後の2文字を除いて、含まれているすべての数字を印刷したいと思います。 。
数字で始まるが最後の文字または数字ではなく、最後の2文字で終わる行を印刷します。例えば
1234567a 2245678902da A1234566d 12345678abc
出力は次のようになります。
1234567a 22345678902da
最初の文字を除くすべての文字が数字の行、または最初と2番目の文字が数字以外の行を印刷します。例えば
A1234 Ab1234 1a1234 Abc1234
出力は次のようになります。
A1234 Ab1234
ありがとう
ベストアンサー1
$ grep -Ex '[[:digit:]]+(.|[^[:digit:]]{2})' file1
1234567a
2245678902da
拡張正規表現は、[[:digit:]]+(.|[^[:digit:]]{2})
1つ以上の数字の後に指定されていない文字または2つの数字以外の数字が続くものと一致します(仕様の文字通りの解釈は「数字で始まりますが、最後の文字または数字ではなく、最後の2文字で終わります"). この-x
オプションを使用するgrep
と、一致が行全体に表示されます。
指定した内容のリテラル解釈は、以下を含む行とも一致します。ただ数字。
そして
$ grep -Ex '[^[:digit:]]{1,2}[[:digit:]]+' file2
A1234
Ab1234
1 つまたは 2 つの数字ではなく数字で始まり、行の最後まで 1 つ以上の数字を含む行を一致させます。
2つの正規表現の視覚的表現(使用方法も表示sed
):
最初:
$ sed -nE 's/^([[:digit:]]+)(.|[^[:digit:]]{2})$/(\1)(\2)/p' file1
(234567)(a)
(2245678902)(da)
第二:
$ sed -nE 's/^([^[:digit:]]{1,2})([[:digit:]]+)$/(\1)(\2)/p' file2
(A)(1234)
(Ab)(1234)
解決策は、コマンドからすべての括弧を削除することでsed
見つけることができます。sed