【问题标题】:How to use sed to comment and add lines in a config-file如何使用 sed 在配置文件中注释和添加行
【发布时间】:2019-10-09 21:26:29
【问题描述】:

我正在寻找一种方法来实现以下目标:

某个目录包含4个(配置)文件:

  • 文件1
  • 文件2
  • 文件3
  • 文件4

我希望我的 bash 脚本一个接一个地读取每个文件。在每个文件中,查找以“params:”开头的特定行。我想注释掉这一行,然后在下一行输入“参数:根据我的意愿更改”。

我知道有很多方便的工具(例如 sed)可以帮助完成这类任务。于是我试了一下:

sed -ri 's/params:/^\\\\*' File1.conf
sed -ri '/params:/params: changed according to my will' File1.conf

问题:在找到params: 的整行副本之后,第一行是否真的用\\ 替换了正则表达式params:?我不确定我可以在这里使用 *。

那么,我将如何实现对所有 4 个文件执行这些命令?

【问题讨论】:

    标签: linux bash sed


    【解决方案1】:

    因此,此命令将注释您文件中以params: 开头的每一行,并在下一行附加文本

    sed -E -i 's/^(params:.*)$/\/\/\1\nYOUR NEW LINE HERE/g'
    

    ^(params:.*)$ 模式将匹配以 params: 开头的任何整行,括号表示这是一个捕获组。

    然后,它通过\1 用于sed 命令的第二部分,这是找到的第一个捕获组的引用。所以你可以看到第二部分是第一行,添加一个换行符,最后是你的文本。

    您只需转到 sed -E -i 's/^(params:.*)$/\/\/\1\nYOUR NEW LINE HERE/g' file1 file2 file3 file4 即可对所有文件执行此操作

    希望这会有所帮助!

    【讨论】:

    • 太棒了,非常感谢! ... 最后一件事:你为什么使用 -E 而不是 -r?我认为 -r 用于允许正则表达式。 -e 用于执行脚本。 ...我猜我们是,因为 's ? -E 需要大写吗?
    • -r 和 -E 实际上是相同的选项,但名称不同。来自man sed-E, -r, --regexp-extended: use extended regular expressions in the script (for portability use POSIX -E).
    • 啊好吧,我明白了。顺便说一句,^(params:.*)$ 是否忽略了参数之前的空格?因为我的行实际上是缩进的
    • 不,它不会起作用,因为 ^ 表示一行的开头,您需要在后面添加文件中的空格数,例如^ (params:.*)$。或者,如果您想忽略任意数量的空格:^[[:space]]*(params:.*)$
    【解决方案2】:

    你可以这样做:

    for i in **conf
    do
        cp $i $i.bak
        sed -i 's/\(params:\)\(.*\)$/#\1\2\n\1new value/' 
    done
    

    与:\(params:\)\(.*\)

    • 匹配params:并将其存储在`\1
    • 匹配.*\:之后的文本并将其存储在\2

    然后创建两行:

    • 第一行注释:#\1\2\n
    • 具有您想要的值的新行:\1new value

    【讨论】:

      【解决方案3】:

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

      parallel --dry-run -q sed -i 's/^params:/#&/;T;aparams: bla bla' {} ::: file[1-4]
      

      在所需目录中运行此命令,如果命令正确,请删除 --dry-run 选项并真正运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        • 1970-01-01
        • 2012-06-13
        • 2015-07-23
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        相关资源
        最近更新 更多