【问题标题】:$ sed -i does not change the file in place$ sed -i 不更改文件
【发布时间】: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 我试试看。它不会更改原始文件,它会更改备份文件。我不想备份。

标签: bash sed text-files


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢。这是工作。我花了两天时间解决这个问题。
猜你喜欢
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2012-10-10
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多