如何在bash中替换特殊字符

时间:2014-03-28 18:42:53

标签: bash sed awk

我有两个问题。我有这样的输入

foo.o
bar.o

我需要用我选择的字符替换点(在这种情况下它是" D")并且我需要在每行的末尾附加"]。

我知道如何使用awk附加]

awk '{print $0"]"}' 

但我不知道如何添加"同样,我的简单尝试是

  awk '{print $0""]"}' 

但正如预期的那样无效。

此外,我根本不知道如何更换点。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

.是一个正则表达式元字符。把它放在一个字符类中:

awk '{gsub("[.]", "D", $0)}{print $0"]"}'

双重逃避

awk '{gsub("\\.", "D", $0)}{print $0"]"}'

要添加引号,请将其转义。要添加"],请说:

print $0"\"]"

答案 1 :(得分:2)

使用sed

$ sed 'y/./D/;s/$/]/' input.txt 
fooDo]
barDo]
$ 
  • y/./D/替换“。”的所有实例。用“D”。 y命令是一个简单的字符串替换而不是正则表达式替换,因此.在此命令中不需要任何特殊的转义。
  • s/$/]/匹配该行的结尾并有效地附加“]”。