【问题标题】:Text Manipulation using awk/sed使用 awk/sed 进行文本操作
【发布时间】:2016-04-28 07:16:39
【问题描述】:

我可以在函数名和左大括号之后插入文本吗

例如:

void func()
{
Some text needs to be inserted before me
}

o/p

void func()
{
Hello here I am...
Some text needs to be inserted before me
}

使用 awk/sed?

【问题讨论】:

    标签: awk sed


    【解决方案1】:

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

    sed '/^void func()/!b;n;a\Hello here I am...' file
    

    如果它与 func 名称不匹配,则会退出。匹配后打印该行,读取下一行并将所需的字符串附加到该行,该字符串将在{ 之后打印。

    同样可以使用:

    sed -e '/^void func()/{n;a\Hello here I am...' -e '}' file
    

    【讨论】:

    • 感谢 potong...它正在工作,但是 "!b" 和 "{n" 是什么意思
    • @Soumyadutta:命令/.../!b 表示不匹配中断,因为没有提供标签,默认是退出当前行的任何后续命令,因此请阅读下一行并从sed 命令的开始。 {...} 构造只是将包含在地址匹配中的命令分组,即/^void func()/。由于 append 命令需要一个换行符来终止它,关闭 } 需要在单独的 -e 命令中。
    【解决方案2】:

    sed 用于对单个行进行简单替换,对于更有趣的内容,您应该使用 awk。例如,将 GNU awk 用于多字符 RS,请注意脚本是如何工作的,而不管这些常见的函数定义布局可能性如何:

    $ cat file                                                  
    void func()
    {
    Some text needs to be inserted before me
    }
    
    void
    func()
    {
    Some text needs to be inserted before me
    }
    
    void func() {
    Some text needs to be inserted before me
    }
    

    .

    $ awk -v RS='^$' -v ORS= '{gsub(/void\s+func\(\)\s*{/,"&\nHello here I am...")}1' file
    void func()
    {
    Hello here I am...
    Some text needs to be inserted before me
    }
    
    void
    func()
    {
    Hello here I am...
    Some text needs to be inserted before me
    }
    
    void func() {
    Hello here I am...
    Some text needs to be inserted before me
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多