1

Linux 共有ホスティングのすべての Javascript ファイルから 2 行を削除しようとしています。スクリプトを作成せずにこれを実行したかったのは、sed. 私の現在の試みは次のようになります。

find . -name "*.js" | xargs sed -i ";var 
O0l='=sTKpUG"

2 行目は実際にはこれより長くなりますが、悪意のあるコードであるため、ここには含めません。ご想像のとおり、私のサーバーがハッキングされたので、これらの JavaScript ファイルをすべてクリーンアップする必要があります。

現時点で得ている出力は次のとおりであることを忘れていました。

sed: -e expression #1, char 4: expected newer version of sed

2行は、連続して次のとおりです。

;var

O0l='=sTKpUG

ただし、2 行目は長くなりますが、2 行目の残りの部分がコマンドに影響を与えることはありません。

4

2 に答える 2

2

彼は、隣接する 2 つの行を削除することを意味していました。

このようなことができます。ファイルをバックアップすることを忘れないでください。

find . -name "*.js" | xargs sed  -i -e "/^;var/N;/^;var\nO0l='=sTKpUG/d"

sed は入力ファイルを 1 行ずつ処理するため、改行 '\n' 文字をバッファーに格納しないため、フラグ /N を使用して、次の行に改行文字を追加するように指示する必要があります。

/^;var/N;

次に、パターンの検索と削除を行います。

/^;var\nO0l='=sTKpUG/d
于 2013-03-22T03:20:16.117 に答える
0

2 つの行がどのように見えるかはまだ明確ではなく、JavaScript で隣接しているかどうかも明確ではないため、隣接していないと仮定します。ただし、答えは次のようになります。

find . -name "*.js" |
xargs sed -i -e '/^distinctive-pattern1$/d' -e '/^alternative-pattern-2a$/d'

sed単一のコマンド文字列を使用してスクリプトを作成する方法は他にもあります。別々の操作には別々の引数を使用することを好みます (スクリプトがより明確になります)。

明らかに、情報の一部を行の 1 つに保持する必要がある場合は、適切に調整された検索パターンを使用して、削除する必要がある短いセクションを削除するs/short-pattern//代わりに代替を行うことができます。d関連する場合は、長い行と同様です。

于 2013-03-22T02:20:29.837 に答える