macos - sed: c 命令,只改变第一行,文本被删除

标签 macos bash sed

我在编写 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 '1c\
Apricot' prova

1 你告诉 更改第一行。

如果您不一定要更改第 1 行,但第一次出现 Apple,您可以这样做

sed '0,/Apple/s/.*Apple.*/Apricot/'

我在这里使用了替换命令s(坦白说,我从来没有使用过c),它只适用于从第0行开始的范围到 Apple 的第一次出现。如果找到 Apple,则整行替换为 Apricot

关于macos - sed: c 命令,只改变第一行,文本被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201056/

相关文章:

bash - 如何使程序由脚本顶部的 #!/bin/foo 调用?

bash - 在 bash 中转义斜杠 (awk)

sed - 如何使用 sed 替换第 n 次出现的字符串

macos - 解析雅虎天气 RSS 源

Mac OS X 10.8 上 NetBeans 中的 Java GUI

macos - 尝试使用 OSX 使用 schemacrawler 连接到 sqlite 数据库 - 为什么它要求用户?

objective-c - Log4xx 作为 Cocoa 框架?

bash - 在 bash 中评估字符串中的变量

linux - 如何使用 sed 或 awk 从字符串中提取多个参数

sed + 仅在文件的最后一行删除字符串