【问题标题】:How to replace this kind of string using sed?如何使用 sed 替换这种字符串?
【发布时间】:2023-03-19 15:25:01
【问题描述】:

我有一个包含此类字符串的日志文件:

[1234(0) #1] 
[1234(1) #2] 
[1234(3) #0] 

等等...(注意每个字符串中的最后一个空格)

所以,我需要将这些字符串替换为空。我试图执行:

$ sed -i 's/\[1234\(\d\)\s#\d\]\s//g' log.txt

但它似乎不起作用......确实,如果我运行:

$ grep '\[1234([0-9])\s#[0-9]\]\s' log.txt

我仍然收到这些字符串...怎么了?

【问题讨论】:

  • 您到底想保留什么?你说你想删除一些东西,但不是你想要保留的东西。日志文件示例是否完整?
  • 您的意思是除了空格之外,您想要返回相同的字符串——并且所有记录的结构都完全相同?

标签: regex linux replace sed


【解决方案1】:

您的 版本可能不支持\s\d。此外,() 默认不需要转义。以下对我有用

sed 's/\[1234([[:digit:]])[[:space:]]#[[:digit:]]\][[:space:]]//g' file

【讨论】:

【解决方案2】:

如果您喜欢使用\s\d,您可以使用 而不是,进行就地编辑。 :

ex +'%s/\[1234(\d)\s#\d\]\s//g' +'wq' ./log.txt

【讨论】:

  • 感谢您的额外提示!
猜你喜欢
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2017-02-08
  • 2019-06-07
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多