【问题标题】:Why sed does not add string in the file line?为什么 sed 不在文件行中添加字符串?
【发布时间】:2026-01-12 17:05:01
【问题描述】:

我正在尝试使用 OSX sed 在文件的开头添加带有一些字符串 (\mu) 的新行。 现在我可以为常见的文本和数字做到这一点。但是对于符号它不起作用。

sed -i -e '1s/^/\\mu/' file

这会添加mu,但不会添加\mu

【问题讨论】:

  • 它对我有用。
  • 对不起。 sed -i -e '1s/^/\\mu/' file 适合你吗?你在使用 GNU sed 吗?
  • 好的。我检查了。它适用于 GNU sed,但不适用于 OSX sed。那么我应该编辑我的问题。

标签: macos sed


【解决方案1】:

我在 OSX 10.13.6(我认为是最新的 Xtools)和 Darwin 17.7.0 上执行了sed -i -e '1s/^/\\mu/' ./file。 我确实注意到为命令的不同变体生成重复文件是异常的。让我解释一下,

sed -i -e 's/^/\\mu/' ./tmp.txt

即在每个新行上放置“\mu”。 在文件“tmp.txt”中输出,

    \mulease 192.168.234.5 {
    \mu  starts 3 2018/11/21 18:53:11;
    \mu  ends 3 2018/11/21 18:54:11;
    \mu  tstp 3 2018/11/21 18:54:11;
    \mu  cltt 3 2018/11/21 18:53:11;
etc...

如果我执行你想要的命令,

sed -i -e '1s/^/\\mu/' ./tmp.txt

在文件“tmp.txt”中输出

    \mulease 192.168.234.5 {
      starts 3 2018/11/21 18:53:11;
      ends 3 2018/11/21 18:54:11;
      tstp 3 2018/11/21 18:54:11;
      cltt 3 2018/11/21 18:53:11;
...etc 

旧文件“tmp.txt”现在被复制并变为“tmp 3.txt”,而最新版本的 tmp.txt 已正确编辑。在文件名中引入空格并不酷('tmp 3.txt),为什么从 3 开始? 希望对您有所帮助。

【讨论】:

  • 我有相同的 OSX 和最新的 Xtools。我可以看到它现在正在给出结果。我仍然不知道之前发生了什么。但与此同时,我还有一个用file-e 创建的额外文件。在 OSX 上,我看到与 GNU sed 不同,总是需要 -e。这个额外的文件似乎没有必要。