egrep
文字も数字の行を確認するLinuxコマンドを作成しようとしています。
私はこうする:
egrep "^(.[0-9])*$" text.txt
ただし、この方法は i) 空行と ii) 奇数文字では失敗します。123
唯一の奇数位置は実際には数字であるため、一致する必要がありますが、そうではありません。
有効なモード:
a2b4c6
000000
123
a1b
a1b2c3q
無効なモード:
aaaa
0a0a0a
a1bq
私がどんなミスをしたのか誰が教えてもらえますか?
編集:唯一の制限は、各代替文字が偶数でなければならないことです。全行の長さは偶数でも奇数でもよい。上記のコマンドは偶数の長さのみを許可します(例:1234、a1b2c3など)。しかし、123、a1bも有効ですが、これは一致しません。私の質問は、この問題をどのように処理するかです。
ベストアンサー1
正規表現は*
「0以上」を意味するため、空行に一致するため、^(.[0-9])*$
空行に一致します。+
(「1つ以上の一致」)を使用してこの問題を解決できます。
次の問題は、1行に偶数の文字がある場合、一致する文字がないことです。これを防ぐには、grep
最後に0または1文字が許可されていることがわかります。
grep -E "^(.[0-9])+.?$"
たとえば、
$ cat file
a2b4c6
000000
123
aaaa
0a0a0a
$ grep -E "^(.[0-9])+.?$" file
a2b4c6
000000
123