ファイルがあり、完全な単語ではなくパターンに一致する唯一の単語がtemp
必要です。grep
試してみましたが、grep -o <pattern> file
目的の結果は出ませんでした。
入力する
xi29 vddf vss vddf vss int_s s2 rstb mg91a02_l_nd2_bulk_vt1 ln1=16n ln2=16n lp1=16n lp2=16n nf_n1=1 nf_n2=1 nf_p1=1 nf_p2=1
xi28 vddf vss vddf vss d1 d mg91a02_l_inv_bulk_vt1 ln=16n lp=16n nf_n=1 nf_p=1 nfin_n=2 nfin_p=2 m=1
xi25 vddf vss vddf vss int_m2 int_m1 mg91a02_l_inv_bulk_vt1 ln=16n lp=16n nf_n=1 nf_p=1
注文する
grep -o 'mg91a02' temp
出力(インポート)
mg91a02
mg91a02
mg91a02
出力(必須)
mg91a02_l_nd2_bulk_vt1
mg91a02_l_inv_bulk_vt1
mg91a02_l_inv_bulk_vt1
答え1
努力する
grep -E -o 'mg91a02\w+'
どこ
-E
: 拡張正規表現-o
一致する単語のみを印刷\w
:言葉文字(英数字または下線、同義語[_[:alnum:]]
)。+
1回以上
空白以外の文字の場合は、@
コメントに基づいて文字列をキャプチャするには\S
(略語[^[:space:]]
)を参照してください。
grep -E -o 'mg91a02\S+'
OPの編集済み入力を使用すると、結果は次のようになります。
mg91a02_l_inv_bulk_vt1
mg91a02_l_nd2_bulk_vt1
mg91a02_l_nd2_@bulk!_vt1
mg91a02_l_nd2_[bulk]_vt1
mg91a02_l_inv_bulk_vt1
-o
、\w
およびは\S
非標準拡張子です。
答え2
grep -o 'mg91a02[^ ]*' file
これは、最初のスペースが表示されなくなるmg91a02
までパターンを印刷するか、()スペース以外のすべてを印刷することを意味します。^
[^ ]
答え3
Perl正規表現の使用:
grep -Po '\w*mg91a02\w*'
たとえば、
$ grep -Po top .zshrc
top
top
top
top
top
top
top
$ grep -Po '\w*top\w*' .zshrc
setopt
setopt
autopushd
setopt
setopt
setopt
setopt