簡體   English   中英

在linux中搜索和替換文件(sed)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM