2つのパターンの間(および除く)に行を印刷します。

2つのパターンの間(および除く)に行を印刷します。

cURLを使用して他のファイルから取得したコンテンツを含むフォームを送信します。sed

param1別のファイルの行一致パターンを使用すると、sed次のことが正常に動作します。

curl -d param1="$(sed -n '/matchpattern/p' file.txt)" -d param2=value2 http://example.com/submit

それでは、トラブルシューティングを始めましょう。一致するパターン自体ではなく、2つの一致するパターンの間にのみテキストを表示したいと思います。

file.txt以下が含まれると言えます。

Bla bla bla
firstmatch
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.
secondmatch
The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

現在、多くの "beetween 2 match pattern"コマンドはおよびをsed削除しません。firstmatchsecondmatch

私は結果が次のようになりたいです。

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.

答え1

これを行うための1つの方法は次のとおりです。

sed '1,/firstmatch/d;/secondmatch/,$d' 

説明: 最初の行から一致する行まで最初のゲーム、削除。ラインマッチングの観点からセカンドゲーム最後の行に行き、削除してください。

答え2

最初の行に1が表示されると、他のsed回避策は失敗します。firstmatch

簡単に保ち、単一の範囲と空の2正規表現を使用してください。
範囲の終わりを除き、範囲内のすべてを印刷します(自動印刷は無効になります)3

sed -n '/firstmatch/,/secondmatch/{//!p;}' infile

または、より短くは、範囲内にないすべての項目を削除し、範囲の終わりを削除します。

sed '/firstmatch/,/secondmatch/!d;//d' infile


1:理由は 2番目のアドレスが正規表現の場合、スキャン終了の一致は最初のアドレスと一致する行の次の行から始まります。
したがって、/firstmatch/入力の最初の行は評価されず、行sed番号と一致するため、削除され、1,/RE/2番目の行に移動して一致することを確認します。/firstpattern/

2:いつ正規表現空(例//:)はsed最後のように動作します。正規表現最後に適用されたコマンドで使用された内容を指定します(アドレスまたは代替コマンドの一部として)。

3:;}構文は最新のsed実装に適しています。古い実装では、セミコロンや別の式の代わりに改行文字を使用してください。sed -n -e '/firstmatch/,/secondmatch/{//!p' -e '}' infile

答え3

まったく:

awk '
  $1 == "secondmatch" {print_me = 0}
  print_me {print}
  $1 == "firstmatch {print_me = 1}
'

関連情報