私のサーバー上のファイルが破損しています。 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