ディレクトリ内のすべてのファイルから3行のコードを検索して削除するのに役立ちます。
コードは次のとおりです
if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) {
include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' );
}
交換ではなく取り外すだけです。
どんなアイデアがありますか?
広告乾杯
答え1
perl -0777 -i~ -pe "s{^\\Qif ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { \E\n\Q include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); \E\n}\n}{}m" -- dir/*
0777
「フルルックモード」を有効にします。つまり、1行ずつ読み込むのではなく、ファイル全体をロードします。-i
ファイルを「設定」に変更して、名前に追加されたバックアップを作成します~
。~
-p
処理後に入力内容を印刷します。- このコードは単なる代替コードですが、ファイル
s{}{}
全体を読み込むときに3行を実行します。 - Final
m
修飾子は:の動作を変更して^
文字列の先頭を一致させるのではなく、各行の先頭に一致させます。 - 引用符の間にすべての内容が含まれる
\Q...\E
ため、特殊文字にバックスラッシュを追加する必要はありません。
find
これをサブディレクトリの再帰実行と組み合わせることができます。ただし、置換区切り記号を{}
次のように変更する必要がありますfind -exec
。
find /dir -type f -exec perl -i~ -0777 -pe "s<^\\Qif ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { \E\n\Q include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); \E\n}\n><>m" -- {} +
答え2
find /dir -type f -print0 \
| xargs -0r grep -Fn "$(cat << 'EOT'
if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) {
include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' );
}
EOT
)" \
| tac \
| while IFS=: read -r file_name line_number _; do
sed -i "${line_number}d" "$file_name" # You can dry run by commenting out this line.
echo "Removed ${line_number}th line from $file_name"
done
sed
行番号を使用して行を削除しますgrep
。
grep -n
:一致する行番号を表示します。grep -F
:固定文字列と一致します。パフォーマンスのために動作します。tac
バックラインから取り外し用。行番号の変更を防ぎます。sed -i "${line_number}d" "$file_name"
:$line_number
以下から削除$file_name
...
答え3
同じウイルスがあり、メモ帳++でテキストを削除しました。
if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) {\r\n\x20\x20\x20\x20include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' );\r\n}
空白に置き換えます。
答え4
次のコマンドを使用して、PATTERNを含む行と次のn行(あなたの場合は2行)を削除できます。
sed '/PATTERN/,+2d'
最初の行のPATTERN部分がこれを行う必要があります。