如何使用 sed 根据正则表达式删除特定文本

如何使用 sed 根据正则表达式删除特定文本

我得到了一个包含以下内容的文本文件

2012/03/15 : "Password":"@#4JF9u92r","Name":"John"

我希望使用 sed 将上述内容更改为

2012/03/15 : "Password":"XXX","Name":"John"

我已经尝试过以下命令

cat log.txt | sed 's/\("Password":\"\)\(.*\)\(\",\"Name\":\)/\1XXX/'

但它给了我

2012/03/15 : "Password":"XXX"John"

我做错了什么?

谢谢!

答案1

你应该稍微改变你的sed命令:

sed 's/\("Password":\"\).*\(\",\"Name\":\)/\1XXX\2/'

答案2

下面是正则表达式的基础,放置必要的转义字符

(\s"Password":")(.*?)(","Name":"(.*?)")

用。。。来代替\1XXX\3

放置适当的转义字符后,我认为它应该是这样的。

cat log.txt | sed '\(s/\"Password\":\"\)\(.*?\)\(\",\"Name\":\"\(.*?\)\"\)/\1XXX\3/'

答案3

这可能对你有用:

echo '2012/03/15 : "Password":"@#4JF9u92r","Name":"John"' |
sed 's/\("Password":"\)[^"]*/\1XXX/'
2012/03/15 : "Password":"XXX","Name":"John"

相关内容