1

次のファイルがあります。

$ cat file
> First line
> Second line
> Third line
> Fourth and last line
> First line
> Second line
> Third line
> Fourth and last line

最初の3行を簡単に印刷したい:

$ sed -n '1,3p' file
> First line
> Second line
> Third line

First今、私は出現から出現まで印刷したいThird:

$ sed -n '/First/,/Third/p' file
> First line
> Second line
> Third line
> First line
> Second line
> Third line

ああ!私が望んでいたものとはまったく異なります。一致したパターン範囲の最初の出現のみが必要です。アドレスとして正規表現を使用している場合、どうすればそれを行うことができますか?

4

4 に答える 4

2

これを試すことができますsed

sed -n '/First/{:loop; $!N; /Third/{p;q}; b loop;}' file
于 2013-10-30T12:54:52.363 に答える
2

awk がこれを行うのに役立つと思います

  awk '/First/{found=1} found{print; if(/Third/) exit}' file
于 2013-10-30T12:55:46.053 に答える
2

あなたはこのようにすることができますawk

awk '!f; /Third/ {f=1}' file
> First line
> Second line
> Third line

または、見つかった後にファイルの処理を停止するため、さらに短くて優れています。

awk '1; /Third/ {exit}' file

firstまたは、からに取る必要がある場合third

awk '/First/ {f=1} f; /Third/ {exit}' file
于 2013-10-30T12:53:30.367 に答える