找到单词的第一个出现,并使用sed命令编辑它旁边的行



我有一个文件,其中包含单词"字符串";在多行中。我只想编辑/替换第一次出现";字符串";在我的文件中

我试过这个sed-i'/string/{n;s/.*/new string/1}'测试文件

但我正在获得所有其他行的更新,在其他行出现";字符串";

您可以使用这个:

sed '/string/{n;s/.*/new_string/;:a;n;ba}' input.file

我添加了:a;n;ba命令:

:a # defines a label 'a'
n  # read next line of input
ba # branch (jump) to label a

这实际上是一个通过剩余行的循环,直到文件结束,打印出所有剩余行时保持不变。

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

sed 'x;/./{x;b};x;/string/!b;h;n;c new_string' file

使用保留空间作为标志,如果设置了,则缩短任何进一步的处理。

注意:sed -e '/string/{n;c new_string' -e ':a;n;ba}' file可能看起来有效,但会引入错误(请参阅@hek2mgl解决方案中的注释(。

我会使用ed而不是sed:

ed -s test-file <<EOF
/string/+1c
new string
.
w
EOF

将紧接在正则表达式CCD_ 5的第一次匹配之后的行替换为CCD_。

最新更新