【问题标题】:How to insert 4 newlines before pattern match with SED?如何在 SED 模式匹配之前插入 4 个换行符?
【发布时间】:2014-03-18 11:19:04
【问题描述】:

如何在模式匹配前输入 4 个空白行?

我可以的

sed '/patterntosearch4/G' 1.txt > 2.txt 

创建一个新文件 (2.txt),在每个模式之后有一个空行。

但是如何在匹配前输入 4 个空行呢?

Manpage SED 似乎没有提供任何答案。

非常感谢任何帮助!

【问题讨论】:

  • 带有反向引用的正则表达式。

标签: macos shell sed terminal


【解决方案1】:

这可能对你有用(GNU sed):

sed '/patterntosearch4/i\\n\n\n' file

或者如果您愿意:

sed -e '/patterntosearch4/!b' -e 'G' -e 's/\(.*\)\(.\)/\2\2\2\2\1/' file

顺便说一句,当您使用 G 命令时,它会在模式匹配的行之后插入一个换行符,我猜您想在模式匹配的行之前插入一个换行符。

【讨论】:

  • 谢谢,您的第二个回答解决了我的问题! PS第一个刚刚生成了4次前面的字母N,不知道为什么?
【解决方案2】:

在著名的sed单行博客(http://www.catonmat.net/blog/wp-content/uploads/2008/09/sed1line.txt)

# insert a blank line above every line which matches "regex"
 sed '/regex/{x;p;x;}'

所以在你的情况下,

sed '/atterntosearch4/{x;p;p;p;p;x}' file

sed '/atterntosearch4/{x;P;P;P;P;x}' file

【讨论】:

    【解决方案3】:

    sed 的替代方案,无需替换 (s/../../):

    sed '/pat/{x;p;p;p;p;x}'
    

    测试:

    kent$ (master|✔) seq 5|sed '/3/{x;p;p;p;p;x}'      
    1
    2
    
    
    
    
    3
    4
    5
    

    【讨论】:

      【解决方案4】:

      使用 gnu-sed 你可以做到:

      sed -i.bak 's/pattern/\n\n\n\n&/' file
      

      【讨论】:

        【解决方案5】:

        还有很多方法,但这里有一个非常简单的方法:

        sed 's/patterntosearch4/\n\n\n\n&/' 1.txt > 2.txt
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-28
          • 2012-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          相关资源
          最近更新 更多