2つの繰り返しテキストパターンの間にあるすべてのテキストまたは文字を選択します。

2つの繰り返しテキストパターンの間にあるすべてのテキストまたは文字を選択します。

以下はサンプルの.logファイルです(より多くの行がある可能性があります)。

2022 User abc (iii)
2023 defaa <party> ttt
2222221 User def (bbb)
20222 defaa <accoun> ttt
2222 User dddd (aaa)
3333 defaa <hahaha> jmd

User&の間の行を選択したいと思います。ttt

これはログの5行から7行に似ており、このログにはUser&で構成されている行がさらにある場合があります。ttt

Usertttだからあなたがファイルで繰り返されても、&の間のすべての行を取得する方法を知りたいです。

テキストUserttt常に連続した行にあるわけではありません

予想出力:

abc (iii)
2023 defaa <party> 
def (bbb)
20222 defaa <accoun> 

入れ子になった場合は、次のようになります。

2022 User abc (iii)
2222221 User def (bbb)
20222 defaa <accoun> ttt
2023 defaa <party> ttt

予想出力:

def (bbb)
20222 defaa <accoun>

ユーザーとtttは決して同じ行にありません

ベストアンサー1

マルチキャラクタのGNU awkの略語を使用することはあなたが望むものかもしれませんRSRT\s[:space:]

$ awk -v RS='\\s*ttt' 'RT && sub(/.*User\s*/,"")' file
abc (iii)
2023 defaa <party>
def (bbb)
20222 defaa <accoun>

部分一致を許可したくない場合は、User周囲tttに単語の境界を追加してください。

awk -v RS='\\s*\\<ttt\\>' 'RT && sub(/.*\<User\>\s*/,"")' file

おすすめ記事