開始パターンと終了パターンの間のパターンに基づいて開始パターンと終了パターンの間のテキストを取得する

開始パターンと終了パターンの間のパターンに基づいて開始パターンと終了パターンの間のテキストを取得する

私はstartStrケースとの間のすべてを得るために努力しています。私は使用方法とその間に発生するすべてのイベントを理解しています。発生事例を1つだけ制限する方法がわかりません。endStrbbbstartStrendStrsedbbb

入力例:

fff
startStr
aaa
bbb
ccc
endStr
xxx
yyy
startStr
ddd
endStr
ddd
bbb

希望の出力:

startStr
aaa
bbb
ccc
endStr

これが私が持っているものです:

$ sed -n -e '/startStr/,/endStr/ p' sample.txt
startStr
aaa
bbb
ccc
endStr
startStr
ddd
endStr

ベストアンサー1

最初のstartStr...については、endStr次が含ま/bbb/れます。

 sed -n '/startStr/ {:n; N; /endStr/ {/\n[^\n]*bbb[^\n]*\n/ {p; q}; b}; bn}'

または

sed -n '/startStr/ {:n; N; /endStr/ {/\nbbb\n/ {p; q}; b}; bn}'

正規表現でない場合は、bbb正確に必要な文字列です(最初からから\n)。

説明する

住所の場合/startStr/:

  • :nラベル設定
  • 次の行を読むN
  • 一致していることを確認してください/endStr/
    • これが本当なら、/\nbbb\n/私たちが読んだこのブロックで発生を確認してください。
      • ある場合は、{p; q}「印刷と終了」を実行します。
      • それ以外の場合は、b「このブロックをスローして次のブロックの検索を開始します」を実行します。
  • ブロックの終わりでない場合に移動します:n。つまり、読み続けます。

おすすめ記事