UNIX-Sed命令打印行之间的引用

UNIX-Sed命令打印行之间的引用,unix,sed,Unix,Sed,以上内容有助于打印存储和设计之间的行 我的问题是如何获得上述sed命令的第二次出现 我的文件中有许多存储设计模式匹配项,但我想采用第二个匹配项。此awk打印第二个部分: sed '/Storage/,/Design/p' sample.txt 如果文件的start比end多,则该组start/end awk '/start/ {f=1;a++} f && a==2; /end/ {f=0}' file start 2 more data end Perl解决方案: aw

以上内容有助于打印
存储
设计
之间的行

我的问题是如何获得上述sed命令的第二次出现


我的文件中有许多存储设计模式匹配项,但我想采用第二个匹配项。

awk
打印第二个部分:

sed '/Storage/,/Design/p' sample.txt

如果文件的
start
end
多,则该组
start/end

awk '/start/ {f=1;a++} f && a==2; /end/ {f=0}' file
start
2 more data
end
Perl解决方案:

awk '/start/ {f=1} f && a==1; /end/ {if (f) a++;f=0}' file
start
2 more data
end
这可能适用于您(GNU-sed):

正如@jotne所指出的,在第二次发生后停止:

sed -n '/Storage/,/Design/{x;/./{x;p;x};x;/Design/h}' file

将所有存储段保留在缓冲区中,当向缓冲区馈送2个存储时,首先移除,打印段并退出。我使用
\{2\}
轻松地更改所选的事件(如果我记得很清楚,sed限制是255,但很容易解决)

这将从第二个部分打印所有部分,而不仅仅是第二个部分。
awk '/start/ {f=1} f && a==1; /end/ {if (f) a++;f=0}' file
start
2 more data
end
perl -ne '$count++ if /start/; print if /start/ .. /end/ and 2 == $count'
sed -n '/Storage/,/Design/{x;/./{x;p;x};x;/Design/h}' file
sed -n '/Storage/,/Design/{x;/./{x;p;/Design/q;x};x;/Design/h}' file
sed -n '/Storage/,/Design/ H
/Design/ {
    g
    s/\(.*Storage\)\{2\}/Storage/
    t print
    b
 : print
    p
    q
    }' YourFile