$ 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 语法着色文件的这种更改是好的还是破坏性的?