sed或awk打印单词之间的行

sed或awk打印单词之间的行,sed,Sed,如何打印两行之间的所有行 “B节(” 到下一个以行开头的“节”字 A节( 。 ) B节( 。 ) C节( 。 )一般来说,如果您想在文件中的行之间“维护状态”,就像您在这里所做的那样,那么sed将不会完成这项工作。Awk可能是您在本例中可以使用的下一个最简单的工具 以下awk脚本将执行您想要的操作: /^section\ B\ \(/ {InSection=1; next;} /^\)/ {InSection=0; next;} // {if (InSec

如何打印两行之间的所有行 “B节(” 到下一个以行开头的“节”字

A节(

)

B节(

)

C节(

)

一般来说,如果您想在文件中的行之间“维护状态”,就像您在这里所做的那样,那么sed将不会完成这项工作。Awk可能是您在本例中可以使用的下一个最简单的工具

以下awk脚本将执行您想要的操作:

/^section\ B\ \(/   {InSection=1; next;}
/^\)/       {InSection=0; next;}
//          {if (InSection) print $0;}
对上述sed脚本的解释,分步骤进行:

  • 当该行没有
    部分B开始时,移动到下一行
  • 到达所需行后,删除
    节B
    文本行
  • 如果行以
    开头,我们将退出
  • 否则,我们将打印当前处理的行

  • 如果要打印从“section B”到“section C”的所有内容,包括这些行

    sed -ne '/^section B/,/^section/p'
    
    如果您不想打印这两行“截面”

    如果要包括“B部分”和右括号(但不包括“C部分”)

    还有一些其他可能的变体

    sed -n '/section B/,/)/p' file
    
    还是awk

    awk '/section B/,/)/{print}' file
    
    awk -vRS=")" '/section B/{print $0RT}' file
    

    不知怎的,
    /^B部分/!n让我打印该行之前的内容。
    
    sed -ne '/^section B/,/^)/p'
    
    sed -n '/section B/,/)/p' file
    
    awk '/section B/,/)/{print}' file
    
    awk -vRS=")" '/section B/{print $0RT}' file