sed或awk在单词之间打印线条

时间:2010-08-23 15:08:43

标签: sed

如何打印之间的所有行 “B节(” 到下一个开头的“部分”单词?

A部分(

B节(

C节(

4 个答案:

答案 0 :(得分:6)

sed -n '
  /^section B/!n;
  /^section B/d;
  /^)/q;
  p
' yourfile

上述sed脚本的说明,分步骤:

  1. 虽然该行!不以section B开头,但仍会转到下一行。
  2. 在我们到达所需的行后,删除section B文字行。
  3. 如果该行以)开头,我们退出。
  4. 否则我们会打印当前处理过的行。

答案 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;}
相关问题