我正在第二天进行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)
一个"苹果"消失了!有没有解决的办法?请耐心等待,我是初学者......
提前致谢!
尝试
sed '1cApricot' prova
Run Code Online (Sandbox Code Playgroud)
有了1,/Apple/,你定义了一个范围,从1号线开始,并在第一次出现时结束Apple 后, 1号线你想要的是不是一个范围,虽然只是一个单一的线.这可以通过仅使用1(而不是例如1,2)来实现.
上面的命令对我有用,但它取决于sed版本,如果它不起作用,请尝试
sed '1c\
Apricot' prova
Run Code Online (Sandbox Code Playgroud)
随1你告诉sed改变第一行.
如果你不一定想要改变第1行,但第一次出现Apple,你可以做到
sed '0,/Apple/s/.*Apple.*/Apricot/'
Run Code Online (Sandbox Code Playgroud)
我在这里使用了替换命令s(坦率地说,我从不使用c),它只适用于从行0到第一次出现的范围Apple.如果找到Apple,则整行替换为Apricot.