現在、Solaris上でsedを正規表現と一緒に使用しようとしていますが、うまくいきません。 正規表現に一致する行だけを表示する必要があります。
sed -n -E "/^[a-zA-Z0-9]*$|^a_[a-zA-Z0-9]*$/p"
入力ファイル:
grtad
a_pitr
_aupa
a__as
baman
12353
ai345
ki_ag
-MXx2
!!!23
+_)@*
上記の正規表現に一致する行だけを表示します。
grtad
a_pitr
baman
12353
ai345
代替を使用する別の方法はありますか? perlでは可能ですか? 解決策をありがとう。
回答:
回答№1は1Perlとは
perl -ne "print if /^(a_)?[a-zA-Z0-9]*$/" input.txt
ザ (a_)?
マッチ a_
1回か0回です。それはあってもなくてもかまいません。
ザ (a_)
また、 捕獲 マッチ、必要ないものだからあなたは使用することができます (?:a_)?
代わりに。ザ ?:
作る ()
中にあるものだけをグループ化する ?
すべてに適用されますが、覚えていないでください。
回答№2の場合は1
〜と grep
$ grep -xiE "(a_)?[a-z0-9]*" ip.txt
grtad
a_pitr
baman
12353
ai345
-x
行全体に一致-i
大文字小文字を無視-E
拡張正規表現(利用できない場合)grep -xi "(a_)?[a-z0-9]*"
(a_)?
ゼロまたはワンタイムマッチa_
[a-z0-9]*
0個以上のアルファベットまたは数字
と sed
sed -nE "/^(a_)?[a-zA-Z0-9]*$/p" ip.txt
または、GNUの場合 sed
sed -nE "/^(a_)?[a-z0-9]*$/Ip" ip.txt