use*_*341 4 grep sed find text-processing replace
我服务器上的文件已损坏。我想从包含它的所有 PHP 文件中删除一个 13000 个字符串。
字符串看起来像:
?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER[ ... $qhroczocgv=$qjhvvbyvyv; $qhroczocgv=(729-608); $boxknervrr=$qhroczocgv-1; ?>
Run Code Online (Sandbox Code Playgroud)
为简洁起见插入省略号。
当我使用 搜索字符串时grep,我得到一个
grep:无效的反向引用”尽管转义 \![]$
如何首先找到包含整个字符串的所有文件,然后如何从每个文件中删除文本?
假设您有合适的编码约定,只需删除任何大于特定大小的行:
shopt -s extglob nullglob
sed -i.bak -r '/.{10000}/d' **/*.php
Run Code Online (Sandbox Code Playgroud)
对于@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
Run Code Online (Sandbox Code Playgroud)