開いている括弧の横にある3文字だけをGrepしてください。

開いている括弧の横にある3文字だけをGrepしてください。

このテキストがありますが、開いている括弧の横にある3文字を見つけたいと思います。助けてください。

condition: s(XXX_ygh_ghj_jui,00.05) | s(DFG_GHH_CN_GJ_YUI_UYT_UIJ,00.05)
condition: s(GYZ_ygh_ghj_jui,00.05) | s(TYU_GHH_CN_GJ_YUI_UYT_UIJ,00.05)
condition: s(UFG_ygh_ghj_jui,00.05) | s(QWE_GHH_CN_GJ_YUI_UYT_UIJ,00.05)
condition: s(JTH_ygh_ghj_jui,00.05) | s(YUT_GHH_CN_GJ_YUI_UYT_UIJ,00.05)

私が望むo / pは

XXX DFG
GYZ TYU
UFG QWE
JTH YUT

ベストアンサー1

GNUはgrepこれを行うことができますが、grep次のようにして一致を複数行に分割します。

$ grep -oP '(?<=\()...' file
XXX
DFG
GYZ
TYU
UFG
QWE
JTH
YUT

@kusalandandaがコメントで提案したように1行に入れることができますが、pasteこれは次の場合にのみ機能します。正確に1行に2つの一致があります。それ以上でも以下でもない:


$ grep -oP '(?<=\()...' file | paste -d ' ' - - 
XXX DFG
GYZ TYU
UFG QWE
JTH YUT

私はsed同じものを使用するかperl。これらのソリューションは、1行あたり1、2つ以上の一致を処理できます。

$ sed 's/[^(]*(\(...\)[^(]*/\1 /g' file
XXX DFG 
GYZ TYU 
UFG QWE 
JTH YUT 

または

$ perl -lne '@m=(/\((...)/g); print "@m"' file
XXX DFG
GYZ TYU
UFG QWE
JTH YUT

おすすめ記事