我的文件包含以下评论:
\$max_servers = 2;
\#\## BLOCKED ANYWHERE
我正在尝试
\$
的所有实例替换为$
。\#\##
的所有实例替换为###
。我想知道如何通过sed或awk来做这件事
到目前为止,我使用vi或vim
取得了很大的成功%s/^\//gc
%s/^#/\\/###/gc
谢谢
答案 0 :(得分:3)
在一次传递中替换所有[#$]的另一个选项是使用以下正则表达式。以下是VI语法:
:%s/\\\([$#]\)/\1/g
如果括号[]
中的字符不仅仅是#
和$
,还可以替换括号\\
中的字符。
第一个\(
是一个反斜杠 - 因为它在正则表达式中而被转义
保存\)
和\1
之间的表达式,稍后将替换为{{1}}。
答案 1 :(得分:1)
使用反斜杠转义特殊字符。例如,要用\ $替换所有内容,你会这样做
%s/\\\$/$/g
答案 2 :(得分:1)
转义反斜杠可以正常工作
#echo "\#\##"| sed "s/\\\\#\\\\##/###/g"
###
# echo "\\$"| sed "s/\\\\\\$/$/g"
$
答案 3 :(得分:1)
为了替换反斜杠,你必须加倍,所以它可以引用,就像引用其他特殊字符的方式一样。您可以使用sed
代替vim
来帮助自动完成此过程:
$ sed -e 's/^\\\$/$/' -e 's/^\\#\\##/###/' $file > $new_file
请注意,您必须在美元符号前加上反斜杠,因为它们用于标记正则表达式中的行尾。这就是为什么我的第一个表达式中有\\\$
的原因。一个反斜杠引用反斜杠和另一个反斜杠来引用美元符号。
顺便说一句,这些相同的sed表达式也可以在Vim中运行,具体取决于你的Vim设置。
答案 4 :(得分:1)
sed 's|^\\\([$#]\)\\\{0,1\}|\1|' YourFile
您的样本广告的工作也将移除\
中的\$\ ...
,