我正在尝试搜索并替换以下内容:
<?php
<!DOCTYPE HTML>
与
<!DOCTYPE HTML>
到目前为止,我已经尝试过这个:
find . \( -name "*.php" \) -exec grep -Hn "<?php <\!DOCTYPE HTML>" {} \; -exec sed -i 's/<?php <\!DOCTYPE HTML>/<\!DOCTYPE HTML>/g' {} \;
但是我的服务器上没有找到任何带有针头串的文件实例。
答案 0 :(得分:1)
find . -name "*.php" -exec grep -lZz '^<?php[[:space:]]\+<!DOCTYPE HTML>' {} + |
xargs -r0 sed -i '^<?php[[:space:]]*$/,1d'
修改:由于模式中的字符\n
,以前的版本无法正常工作。更新版本避免使用此字符。
答案 1 :(得分:1)
使用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