【问题标题】:delete and replace a line using linux command使用linux命令删除和替换一行
【发布时间】:2016-06-08 10:29:12
【问题描述】:

我正在尝试删除模式匹配的行,并使用 sed 命令将整行替换为另一行。 文件内容:Sample.txt

Testfile=xxxx
Testfile3=uuuu
Testfile4=oooo
Testfile5=iiii
Testfile2=ikeii

我正在使用 sed 命令删除包含 Testfile3=* 的行并替换为 Testfile3=linechanged

sed -i 's/Testfile3=\*/Testfile3=linechanged/' Sample.txt.

但它只是在如下所示的行中附加了可替换的字符串

Testfile3=linechanged=uuuu.

我希望输出是

Testfile3=linechanged.

我做错了什么?

【问题讨论】:

  • 你也可以说sed '/Testfile3/s/.*/Testfile3=linechanged/' file

标签: linux bash sed


【解决方案1】:

星号不匹配:

sed -i 's/Testfile3=.*/Testfile3=linechanged/' Sample.txt
#                   ^^

.* 匹配任意长度 (*) 的任意字符 (.),因此它将匹配到行尾的所有字符。

【讨论】:

    【解决方案2】:

    您可以使用捕获的组来保留将要保留的内容,并使用所需的替换来代替其余部分:

    sed -i 's/^\(Testfile3=\).*/\1linechanged/' file.txt
    

    在您的情况下,像 \* 一样转义正则表达式令牌 * 将匹配 *,例如Testfile3=* 将被匹配。

    【讨论】:

    • \1 是对第一个表达式中转义的() 之间定义的组的引用。在您的情况下,它指的是Testfile3=
    【解决方案3】:

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

    sed '/Testfile3/cTestfile3=linechanged' file
    

    这匹配包含Testfile3 的行并将其更改为所需的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2015-09-07
      • 2021-08-28
      • 2015-07-21
      • 2018-03-12
      相关资源
      最近更新 更多