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