$ sed -i 不更改文件

Posted

技术标签:

【中文标题】$ sed -i 不更改文件【英文标题】:$ sed -i does not change the file in place 【发布时间】:2016-07-15 20:57:50 【问题描述】:

我想使用 sed 实用程序从文本文件中删除前两个字符。我想这样做(就地)。

我尝试了以下方法,但它不起作用:

$ sed -i 's/.2//' C:/Users/User/Desktop/text1.txt
$ sed -i -e 's/.2//' C:/Users/User/Desktop/text1.txt
$ sed -i'' 's/.2//' C:/Users/User/Desktop/text1.txt

只有在我需要备份时才有效:

sed -i.bak -r 's/.2//' C:/Users/User/Desktop/text1.txt

或将其替换到另一个文件中:

$ sed -r 's/.2//' C:/Users/User/Desktop/text1.txt > C:/Users/User/Desktop/text2.txt

如果我输入:

$ sed -i''

我明白了:

-i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)

[后缀]应该是什么?

注意: 我希望对原始文件进行替换,但我不希望有备份文件。 谢谢

【问题讨论】:

如果你指定后缀,它会在编辑之前备份你的文件,并用你提供的字符串作为备份文件名的后缀。 如果提供了 SUFFIX,则进行备份。这就是后缀应该是什么的答案? - 如果您提供后缀,sed -i'SUFFIX' 将创建一个带有'SUFFIX' 的备份文件 根据 sed 实现,-i'' 可能具有破坏性,如果它创建一个没有后缀的“备份”文件并将更改写入同一个文件。 如果你使用-i.bak(注意备份后缀必须附加到-i选项与GNU sed; BSD sed有不同的规则),然后给一个文件@987654333 @,它将创建一个文件text1.txt.bak作为备份。 @anubhava 我试试看。它不会更改原始文件,它会更改备份文件。我不想备份。 【参考方案1】:

您的问题不是到位而是缺少-r 选项。如果你输入

sed -i -r 's/.2//' ... 

应该在没有备份的情况下工作。

【讨论】:

非常感谢。这是工作。我花了两天时间解决这个问题。

以上是关于$ sed -i 不更改文件的主要内容,如果未能解决你的问题,请参考以下文章

对 Vim 的 sed 语法着色文件的这种更改是好的还是破坏性的?

Bash - 使用 sed 更改配置文件

sed初学者:更改文件夹中的所有事件

在 xml 文件中使用 sed 更改值

如何查找多个文件、检查重复文件并用 bash、sed 脚本替换

sed替换