Site Tools


sed

Параметры sed

  • -e ?
  • -i заменяет найденное в файле (в ином случае просто выводит куда Вы ему указали)
  • -f берет выражения из файла
  • -r Указывает что выражение содержит регулярку
's///g' - s указывает "замена" #g указывает "глобально" (все вхождения) 
'/some/d' - удаляет ВСЮ СТРОКУ где встречается some

TODO: как обрабатывать многостаночные (DOTALL) (диапозоны?)

Примеры Sed

echo "sdf\\nsdf" | sed -e 's/\\n/\n/g' # From stdin
:a; /$/N; s/\n//; ta
1) метка 2) добавляем к текущей строке сдедующую (через \n) 3) удаляем разделитель 3) если команда s/// что-то сделала - переходим на метку.
Видно, что /$/ - лишний, но /../ может пригодиться, например: /\\$/.

Параметры perl

TODO: как обрабатывать многостаночные (DOTALL)

Примеры Perl

Примеры

sed -i 's/127.0.0.1/127.0.1.1/g' /etc/hosts

Заменяет все 127.0.0.1 на 127.0.1.1 в файле /etc/hosts

find -type f -name \*.py -exec sed -i -r 's/regexp1/regexp2/g' {} \;
sed -r -i 's/<script>var A.*21bbe805d2c1299b84645aa67bdf7beb-->//g' test2.php
или
sed -r -i -e '/<script>var A.*21bbe805d2c1299b84645aa67bdf7beb-->/d' test2.php

Удаляет строку по регулярному выражению из test2.php

  root@ConConovaloff:/www/core/cgi-bin# echo asdfbzxcfasdabcf | sed 's/[a-z]*/(&)/'
(asdfbzxcfasdabcf)
  root@ConConovaloff:/www/core/cgi-bin# echo asdfbzxcfasdabcf | sed 's/[a-z]*/()&/'
()asdfbzxcfasdabcf

Работа с регулярками. & = найденная регулярка

  echo abcd123 | sed 's/\([a-z]*\).*/\1/'
abcd
sed -e '/^#/d' /etc/services | more

Прочитать /etc/services → Удалить все коментарии (-e '/^#/d') → передать в more

замены

Альтернативная замена:

perl -p -i -e 's/OLD.IP.ADD.RESS/NEW.IP.ADD.RESS/g' 

рекурсивно

find /my/dir -type f -exec perl -p -i -e 's/70.91.164.110/71.91.164.111/g' {} \;

в случае заражения этим:

<?php eval(base64_decode("DQplcnJvcl9yZXBvcnCX0NCn0NCn0="));

используем:

find ./ -type f -name '*.php' -exec perl -pi -e 's/eval\(base64_decode\(\"DQp.*n0=\"\)\)\;//g' '{}' \;
perl -pi -e 's///g' 
символы которые следует экранировать в perl
"\", ".", "^", "$", "|", "[", "]", "(", ")", "*", "+", "?", "{", "}"

Discussion

Constantin Conovaloff, 2015/05/27 18:52

Последовательное применение

sed -e 's/\\n/\n/g' -e 's/\\\\/\\/g' -e 's/\\\\/\\/g' -e 's/\\\//\//g'
You could leave a comment if you were logged in.
sed.txt · Last modified: 2014/02/10 10:13 by conovaloff

Page Tools