sed:c命令,只更改第一行,删除文本

use*_*155 2 macos bash sed

我正在第二天进行shell脚本编写,我偶然发现了这个问题:我想改变整行代码,我只用一个字来识别,我想只在第一次出现时才这样做.

我正在使用sed和c命令,看起来像这样:

名为"prova"的文件中的文字:

Apple is red
Apple is green
Banana
Tangerine
Run Code Online (Sandbox Code Playgroud)

sed 一点代码:

sed -i.bak '1,/Apple/c\
Apricot
' prova
Run Code Online (Sandbox Code Playgroud)

(我正在使用Mac OSX)

奇怪的是,并且与这些人报告的内容一致,如果我这样做,我会获得prova文件的输出:

Apricot
Banana
Tangerine
Run Code Online (Sandbox Code Playgroud)

一个"苹果"消失了!有没有解决的办法?请耐心等待,我是初学者......

提前致谢!

pfn*_*sel 5

尝试

sed '1cApricot' prova
Run Code Online (Sandbox Code Playgroud)

有了1,/Apple/,你定义了一个范围,从1号线开始,并在第一次出现时结束Apple 后, 1号线你想要的是不是一个范围,虽然只是一个单一的线.这可以通过仅使用1(而不是例如1,2)来实现.

上面的命令对我有用,但它取决于版本,如果它不起作用,请尝试

sed '1c\
Apricot' prova
Run Code Online (Sandbox Code Playgroud)

1你告诉改变第一行.

如果你不一定想要改变第1行,但第一次出现Apple,你可以做到

sed '0,/Apple/s/.*Apple.*/Apricot/'
Run Code Online (Sandbox Code Playgroud)

我在这里使用了替换命令s(坦率地说,我从不使用c),它只适用于从行0到第一次出现的范围Apple.如果找到Apple,则整行替换为Apricot.

  • 编辑我的回答. (2认同)