ファイルから長い文字列を削除する

ファイルから長い文字列を削除する

私のサーバー上のファイルが破損しています。 13000個の文字列を含むすべてのPHPファイルからそれらを削除したいと思います。

文字列は次のとおりです。

?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER[ ... $qhroczocgv=$qjhvvbyvyv; $qhroczocgv=(729-608); $boxknervrr=$qhroczocgv-1; ?>

簡潔さのために省略記号を挿入しました。

検索文字列を使用grepすると

grep: \![]$ をエスケープしたにもかかわらず、間違った逆参照」

まず、文字列全体を含むすべてのファイルを見つけて、各ファイルからテキストを削除するにはどうすればよいですか?

ベストアンサー1

コーディング規則が良いと仮定すると、特定のサイズより大きい行を削除します。

shopt -s extglob nullglob
sed -i.bak -r '/.{10000}/d' **/*.php

@wildcardの場合:

find . -name '*.php' -print0 | while IFS= read -rd "" file; do
    before=$(wc -l < "$file")
    after=$(sed -r '/.{10000}/d' "$file" | wc -l)
    case $(( diff = before - after )) in
        0) :;;  # no-op
        *) echo "will remove $diff lines from $file";;
    esac
done

おすすめ記事