すべての数字、すべての文字、および文字を含む行を含む大きなテキストファイルがあり、ここには数字、文字、および文字を含む行も含まれています。最後または最後の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
答え2
説明が若干異なります。最後の1〜2文字は数字にすることができないので、これを読みました。
grep -E '^[[:digit:]]+[^[:digit:]]{1,2}$' file
1234567a
2245678902da
答え3
以下の最初の質問に対するコマンドは次のとおりです。
sed -n '/^[0-9]*[a-z]\{,2\}$/p' filename
出力
1234567a
2245678902da
以下の2番目の質問に対するコマンドは次のとおりです。
sed -n '/^[A-Za-z]\{1,2\}[0-9]*$/p'
出力:
A1234
Ab1234