2013-03-22 2 views
1

Я пытаюсь удалить 2 строки из всех моих файлов Javascript на моем общем хостинге Linux. Я хотел сделать это, не написав сценарий, поскольку я знаю, что это должно быть возможно с sed. Моя текущая попытка выглядит следующим образом:Как удалить несколько строк из нескольких файлов в Linux с помощью bash

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

Вторая линия на самом деле больше, чем это, но это вредоносный код, так что я не включил его здесь. Как вы уже догадались, мой сервер взломан, поэтому мне нужно очистить все эти файлы JavaScript.

Я забыл упомянуть, что выход я получаю на данный момент:

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

2 строки просто следующим образом последовательно:

; вар

O0l = '= sTKpUG

за исключением того, что вторая строка длиннее, но остальная часть второй строки не должна влиять на команду.

+1

Что означает ваша команда 'sed'? Я не понимаю. – pynexj

+0

'awk' может быть лучшим выбором, чем' sed' в этом случае. Я обычно считаю, что 'awk' проще использовать при работе с ситуациями с несколькими строками, как вы, кажется, здесь. Это, вероятно, будет немного более многословным, но * намного более понятным. – danfuzz

ответ

2

Он имел в виду удаление двух смежных линий.

вы можете сделать что-то вроде этого, не забудьте сделать резервную копию ваших файлов.

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

Поскольку строки входного файла SED процессы по линии, он не хранит символ новой строки «\ п» символ в буфере, так что мы должны сказать это с помощью флага/N, чтобы добавить следующую строку с новой строки персонаж.

/^;var/N; 

Затем мы выполняем поиск и удаление нашего шаблона.

/^;var\nO0l='=sTKpUG/d 
+0

Это почти что за исключением того, что шаблон, который вы использовали, не совпадает с тем, который у меня есть, и я все еще получаю сообщение об ошибке: unterminated address regex – Vincent

+0

@ user920840 oops, я отредактировал команду, вы можете проверить, работает ли она? – JiuDong

+0

Я до сих пор получаю сообщение об ошибке - sed: -e выражение # 1, char 300: неизвестная команда: '8 ' – Vincent

0

На самом деле пока неясно, как выглядят две строки, и неясно, находятся ли они рядом друг с другом в JavaScript, поэтому мы предположим, что нет. Однако, ответ, вероятно, будет:

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

Есть другие способы написания sed скрипта, используя одну строку команд; Я предпочитаю использовать отдельные аргументы для отдельных операций (это делает скрипт более понятным).

Очевидно, что если вам нужно сохранить некоторую информацию на одной из строк, вы можете использовать шаблон поиска, скорректированный соответствующим образом, а затем сделать замену s/short-pattern// вместо d, чтобы удалить короткий раздел, который необходимо удалить. Аналогично длинной строке, если это актуально.

Смежные вопросы