[英]search and replace files in linux(sed)
我正在嘗試搜索並替換以下內容:
<?php
<!DOCTYPE HTML>
同
<!DOCTYPE HTML>
到目前為止我試過這個:
find . \( -name "*.php" \) -exec grep -Hn "<?php <\!DOCTYPE HTML>" {} \; -exec sed -i 's/<?php <\!DOCTYPE HTML>/<\!DOCTYPE HTML>/g' {} \;
但它沒有找到我的服務器上存在的帶有針串的文件的任何實例。
find . -name "*.php" -exec grep -lZz '^<?php[[:space:]]\+<!DOCTYPE HTML>' {} + |
xargs -r0 sed -i '^<?php[[:space:]]*$/,1d'
編輯:由於模式中的字符\\n
,以前的版本無法正常工作。 更新版本避免使用此字符。
使用GNU awk(對於RS='\\0'
將整個文件作為一個記錄讀取)並假設您的文件名不包含換行符,您只需要清楚,簡單:
find . -name '*.php' -print |
while IFS= read -r file; do
gawk -v RS='\0' '{gsub(/<\?php\n<!DOCTYPE HTML>/,"<!DOCTYPE HTML>"); print}' "$file" > tmp &&
mv tmp "$file"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.