0
我使用这个代码搜索和当前目录替换所有的PHP文件中的文本:如何在awk中为我的代码转义特殊字符?
for file in `find * -type f -name "*.php"`; do awk 'BEGIN { RS="" } FILENAME==ARGV[1] { s="$0" } FILENAME==ARGV[2] { r="$0" } FILENAME==ARGV[3] { gsub(s,r) ; print }' "zsearch" "zreplace" "$file" > "$file"tmp7 && mv "$file"tmp7 "$file";echo "$file"; done
如果zsearch文件的内容:
<br>
<center><!--LiveInternet counter--><script type="text/javascript"><!--
它的工作很好,但如果zsearch文件的内容:
<!--LiveInternet counter--><script type="text/javascript"><!--
document.write("<a href='http://www.liveinternet.ru/click' "+
"target=_blank><img src='http://counter.yadro.ru/hit?t16.6;r"+
escape(document.referrer)+((typeof(screen)=="undefined")?"":
";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+
";"+Math.random()+
"' alt='' title='LiveInternet: показано число просмотров за 24"+
" часа, посетителей за 24 часа и за сегодня' "+
"border=0 width=88 height=31></a>")//--></script><!--/LiveInternet-->
它不工作,而不是取代
我认为这是由于括号(
中的符号document.write("
也许我需要转义其他符号,如+ or *
?
谢谢你的回答,我测试了代码,它不工作,它没有任何变化,尝试了一小部分文本从“<! - LiveInternet counter - >”替换为“替换文本”。也许有代码中的“substr”的一些错字?我想以简便的方式搜索和替换文本或代码,只需简单地复制粘贴文本或代码即可,而不需要困难的正则表达式规则。 – kostya572
在我的代码中没有正则表达式,它是一个简单的字符串替换,我没有看到任何代码问题,但显然我无法测试它,因为您的问题不包括我可以测试的示例输入/输出。噢,请继续 - 这是'$ 0'附近的引号。你的代码有's =“$ 0”'而不是's = $ 0',我只是复制了它而没有考虑它。修复现在... –
哇,现在一切都很好!行情改变了一切,你帮了我很多。我已经看到了sed的类似解决方案,但我更喜欢使用外部文件的awk解决方案。 – kostya572