0

以下を検索して置き換えようとしています。

<?php 
<!DOCTYPE HTML>

<!DOCTYPE HTML>

これまでのところ、私はこれを試しました:

find . \( -name "*.php" \) -exec grep -Hn "<?php <\!DOCTYPE HTML>" {} \; -exec sed -i 's/<?php <\!DOCTYPE HTML>/<\!DOCTYPE HTML>/g' {} \;

しかし、サーバーに存在する針の文字列を含むファイルのインスタンスが見つかりません。

4

2 に答える 2

1

GNU awk(RS='\0'ファイル全体を1つのレコードとして読み取るため)を使用し、ファイル名に改行が含まれていないと仮定すると、必要なのは明確でシンプルです:

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
于 2013-05-06T00:39:54.663 に答える