sed '/Storage/,/Design/p' sample.txt
以上内容有助于打印Storage
和Design
之间的行。
我的问题是如何获得上述sed命令的第二次出现?
我的文件有很多存储 - 设计模式匹配,但我想采用第二次出现的段落。
答案 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
该文件的start
比end
更多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)