如何打印之间的所有行 “B节(” 到下一个开头的“部分”单词?
A部分(
。
)
B节(
。
)
C节(
。
)
答案 0 :(得分:6)
sed -n '
/^section B/!n;
/^section B/d;
/^)/q;
p
' yourfile
上述sed脚本的说明,分步骤:
!
不以section B
开头,但仍会转到下一行。section B
文字行。)
开头,我们退出。答案 1 :(得分:4)
如果您要打印从“B部分”到“C部分”包括这些行的所有内容,
sed -ne '/^section B/,/^section/p'
如果您不想打印两个“部分”行,
sed -e '1,/^section B/d' -e '/^section/,$d'
如果你想包括“B部分”和右括号(但不包括“C部分”),
sed -ne '/^section B/,/^)/p'
还有一些其他可能的变种。
答案 2 :(得分:2)
sed -n '/section B/,/)/p' file
或awk
awk '/section B/,/)/{print}' file
awk -vRS=")" '/section B/{print $0RT}' file
答案 3 :(得分:0)
一般情况下,如果你想在文件中的行之间“维持状态” - 就像你在这里做的那样 - 那么sed将无法完成这项工作。 Awk可能是您在此实例中可以使用的下一个最简单的工具。
以下awk脚本可以执行您想要的操作:
/^section\ B\ \(/ {InSection=1; next;}
/^\)/ {InSection=0; next;}
// {if (InSection) print $0;}