Linux

查找文本,然後在多個文件中插入換行符和一 些 php 程式碼

  • April 10, 2012

我有一個特定的 php 程式碼註釋,它出現在多個使用者的大約 75 個文件中。此命令成功找到它。(我沒有費心尋找雙斜線,因為我不確定是否要逃脫它們,而且它們對於這場比賽真的無關緊要。)

grep -l -r "calls the myfunc() function" /home/*/public_html   

找到它之後,我需要添加一個換行符和一​​些更多的 php 程式碼,例如

if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}

我也需要做類似的事情,比如

grep -l -r "include('path/to/my/file.php')" /home/*/public_html   

然後在它之前插入

"$my_return_var="

搜尋Google,我發現 grep 管道到 sed 可能是要走的路,但我不確定語法。

任何人都可以幫忙嗎?順便說一句,這個 q/a 可能很接近,但還是有點過頭了。如何在 Linux 中替換多個文件中的文本字元串

sed可以在看到模式時進行插入和追加:

grep -l -r "calls the myfunc() function" /home/*/public_html |
xargs sed -i '/calls the myfunc() function/a\
if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}
'

grep -l -r "include('path/to/my/file.php')" /home/*/public_html |
xargs sed -i "/include('path\\/to\\/my\\/file.php')"'/i\
"$my_return_var="
'

第一件事:做好備份!

第二件事:做好備份!

因為我比 python 更了解 perl,所以我會使用 perl 解決方案。

請記住,“\n”是 perl 中的換行符,因此,類似於:

grep -l -r "calls the myfunc() function" /home/*/public_html |xargs perl -pi -e 's/(calls the myfunc() function;)/$1\n if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}/'

我顯然沒有對此進行測試,這是一種蠻力的方法(並假設有很多事情,例如,grep 不會返回帶有空格的文件名等等)。如果您的搜尋/替換模式包含“/”,您可以為您的模式使用替代分隔符,例如,s?(calls the myfunc() function;)?$1\n if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";?'

引用自:https://serverfault.com/questions/378100