正規表現を使用して、次の型属性を持つパターンを表現したいと思います。
1)数値の連続したシーケンスで構成されます。シーケンスの長さは1以上です。
2) 上記の順序の最初の数値の前、上の順序の最後の数値の後、または前後の数字以外の文字が 1 つ以上あります。したがって、正規表現は次の例と一致する必要があります。
A123
A123B
#A123BNNN
.123
-123+
一方、AB123B123
2つの数値のシーケンスがあるため、上記のパターンの範囲外です。この質問では、このシナリオを考慮する必要はありません。私はこれを明らかにしたことを願っています。
答え1
これはあなたが望むことを行うようですgrep
:
$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
追加の行を追加すると、data.txt
これが必要に応じて機能することを示しているようです。
はい
$ cat data.txt
&320
*10-
AB123-
1234
ABCDEF
a20d34
12a12
32q5858j
' 2323 '
234aaa
#A123BNNN
.123
-123+
実行例:
$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
&320
*10-
AB123-
' 2323 '
234aaa
#A123BNNN
.123
-123+
grep
スイッチに慣れていない場合は、 -P
以下のリソースを参照してください。このスイッチを使用すると、grep
Perlで利用可能なほとんどの正規表現エンジンを使用できます。
引用する
答え2
あなたの説明は、数字ではなく数字の後に続く数字、または数字の後に数字ではない数字に要約されているようです。
grep -e '[^0-9][0-9]' -e '[0-9][^0-9]'
答え3
sed '
/^[^0-9]\+[0-9]/b # at least non-digit either before the first digit
/[0-9][^0-9]\+$/b # or after the last digit
d
'
(編集:数字がない場合を処理する必要はありません。問題の説明ではすでにこれを除外しています。