【问题标题】:How to remove specific string occurences from file? [duplicate]如何从文件中删除特定的字符串出现? [复制]
【发布时间】:2019-02-20 01:22:01
【问题描述】:

在这个问题被标记为重复之前,让我解释一下。我正在尝试从文件中删除以下字符串:

 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

我看过类似的问题,他们建议使用 sed 命令:

sed -i -e 's/removedString//g' filename

问题是当我用字符串执行上述命令时:

sed -i -e 's/ * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)//' filename

我收到以下错误:

sed: -and expression #1, character 24: `s' 命令的数字不能为零 (s /// 0)

我假设s/ 只适用于字符串而不是数字,有没有办法正确删除这个痛苦的字符串?

【问题讨论】:

  • 您需要转义特殊字符,例如*、/ 和.。
  • 这与 Python 有什么关系?
  • 我的错,把python放在那里是自动的lol

标签: bash sed


【解决方案1】:

试试这个:

sed -i -e 's| \* Running on http://0\.0\.0\.0:80/ (Press CTRL+C to quit)||' filename

通常当你在玩这个时,不要添加-i,所以只需:

sed -e 's| \* Running on http://0\.0\.0\.0:80/ (Press CTRL+C to quit)||' filename

当它工作时,添加-i 以更改文件inplace。

机制由regexs替代。
而且regex中很多字符都有特殊含义,所以你必须转义它。
s 之后的字符将充当分隔符,s#From#to# 就像这样。
您可能想要添加 g 标志来替换多次出现。 s$from$to$g 左右。

在您的情况下,/ 有很多,所以不妨将其更改为另一个,| 在上面的示例中。

【讨论】:

  • 正要发布这个。使用与/ 不同的分隔符。见here
  • 在这种情况下这样做是正确的;而不是逃避一切。
【解决方案2】:

如果您使用不同的分隔符(而不是“/”),则不必转义所有内容:

sed -e 's| * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)||g' <filename>

【讨论】:

  • 好吧,你仍然必须逃脱 * 和 . 确切地说;-)
  • 我已经测试过这个命令,它运行没有问题。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 2013-08-08
  • 2018-12-04
相关资源
最近更新 更多