我在编写 shell 脚本的第二天就遇到了这个问题:我想更改一整行代码,我只用一个词来标识它,而且我只想这样做第一次出现。
我正在使用 sed 和 c 命令,看起来像这样:
名为“prova”的文件中的文本:
Apple is red
Apple is green
Banana
Tangerine
sed
一段代码:
sed -i.bak '1,/Apple/c\
Apricot
' prova
(我使用的是 Mac OSX)
奇怪的是,与 these guys 报道的一致,如果这样做,我会得到 prova 文件的输出:
Apricot
Banana
Tangerine
一个“苹果”没了!有没有解决的办法?请耐心等待,我是初学者...
提前致谢!
最佳答案
尝试
sed '1cApricot' prova
使用 1,/Apple/
,您可以定义一个范围,从第 1 行开始到第一个 Apple
after 行结束1. 你想要的不是一个范围,只是一行。这可以通过仅使用 1
(而不是例如 1,2
)来实现。
上面的命令对我有用,但它取决于 sed版本,不行的话试试
sed '1c\
Apricot' prova
用 1
你告诉 sed更改第一行。
如果您不一定要更改第 1 行,但第一次出现 Apple
,您可以这样做
sed '0,/Apple/s/.*Apple.*/Apricot/'
我在这里使用了替换命令s
(坦白说,我从来没有使用过c
),它只适用于从第0
行开始的范围到 Apple
的第一次出现。如果找到 Apple
,则整行替换为 Apricot
。
关于macos - sed: c 命令,只改变第一行,文本被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201056/