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

时间:2014-05-12 10:12:15

标签: unix sed

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

以上内容有助于打印StorageDesign之间的行。

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

我的文件有很多存储 - 设计模式匹配,但我想采用第二次出现的段落。

4 个答案:

答案 0 :(得分:1)

awk打印第二部分:

cat file
start
1 data
end
not this
start
2 more data
end
not here

awk '/start/ {f=1;a++} f && a==2; /end/ {f=0}' file
start
2 more data
end

该文件的startend更多start/end

cat file
start
start
1 data
end
not this
start
2 more data
end
not here

awk '/start/ {f=1} f && a==1; /end/ {if (f) a++;f=0}' file
start
2 more data
end

答案 1 :(得分:0)

Perl解决方案:

perl -ne '$count++ if /start/; print if /start/ .. /end/ and 2 == $count'

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

正如@jotne指出在第二次出现后停止:

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

答案 3 :(得分:0)

sed -n '/Storage/,/Design/ H
/Design/ {
    g
    s/\(.*Storage\)\{2\}/Storage/
    t print
    b
 : print
    p
    q
    }' YourFile

将所有存储部分保留在缓冲区中,当使用2存储缓冲区时,首先删除,打印部分并退出。我使用\{2\}轻松更改选定的出现次数(如果我记得很好但是很容易解决,则sed限制为255)