/ Solarisでの代替の/ sed正規表現は機能しません - 正規表現、bash、perl、sed、solaris

Solaris上でsed regexが動作しない - regex、bash、perl、sed、solaris

現在、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は1

Perlとは

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