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

啊! 不是我想要的,我只想要匹配的模式范围的第一次出现。当我有 regex' 作为我的地址时,我该怎么做?

4

4 回答 4

3

附加结束模式作为退出条件:

sed -n '/First/,/Third/p; /Third/q' file

输出:

> First line
> Second line
> Third line
于 2013-10-30T12:56:18.570 回答
2

你可以这样做awk

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

甚至更短更好,因为它在找到后停止处理文件。

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

或者如果它需要从firstthird

awk '/First/ {f=1} f; /Third/ {exit}' file
于 2013-10-30T12:53:30.367 回答
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 回答