このテキストがありますが、開いている括弧の横にある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