查找并替换 - bash

时间:2016-04-11 12:01:14

标签: bash

我想将fw["替换为fw.

我尝试了几个sed命令,但无法解决问题。

我尝试了cut命令,trsed命令。但由于我喜欢替换的字符是特殊字符,因此我会遇到很多错误。

这是我的意见:

endpoint.os.version="Windows 10"
endpoint.fw["MSWindowsFW"].version="10.0"
endpoint.av["AlwilAV"].version="11.1.2253"
endpoint.os.hotfix["KB3116278"]="true"

这是我想要的输出:

endpoint.os.version="Windows 10"
endpoint.fw.MSWindowsFW.version="10.0"
endpoint.av["AlwilAV"].version="11.1.2253"
endpoint.os.hotfix["KB3116278"]="true"  

你能帮我写一个这样的变换吗?

1 个答案:

答案 0 :(得分:1)

假设file.txt

endpoint.os.version="Windows 10"
endpoint.fw["MSWindowsFW"].version="10.0"
endpoint.av["AlwilAV"].version="11.1.2253"
endpoint.os.hotfix["KB3116278"]="true"

作为POSIX regular expressions are greedy,您可以使用Perl执行此操作:

perl -pe 's/fw\["(.*?)"\]/fw.\1/g' file.txt

或纯粹的sed:

sed 's/fw\["\([^"]*\)"\]/fw.\1/g' file.txt

注意:我建议您使用https://regex101.com/https://www.debuggex.com/来测试,可视化和理解正则表达式的作用。

否则,对于你的问题,你只需要避免使用"特殊字符"由你的shell解释;在我的示例中,我将它们放在单引号之间,但您可以将它们转义(即:tr -d \[\"等同于tr -d '["')。