{{tag>shell utils bash}}

====== Sed ======



===== Параметры =====


  * -i - Не обращать внимание на регистр
  * -e - Использовать регулярные выражения

===== Документация =====


===== Замена в файле =====

  * sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName

<note important>Нельзя указывать одинаковый исходящий и принимающий файл. Врезультате его длина будет = 0</note>

===== Замена без временного файла =====

  * sed -i 's/abc/def/' file
  * sed -e 's/abc/def/' file

===== Замена в потоке =====

  * echo 123123| sed 's/1/5/g'
  * echo 123123| sed 's%1%5%g'
  * echo 123123| sed 's$1$5$g'
  * echo 123123| sed 's|1|5|g'

===== Примеры использования =====

  $ sed "s/mytext/$var/"

  $ sed 's/mytext/'$var'/' 

  $ sed 's/mytext/'$var\/

  $ sed 's/mytext/'$var/

  $ sed s/mytext/$var/

**Как рекурсивно измененить apple на orange в файлах текущей директории?**

  $ find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;
  # ./ - текущая директория, sed -i -e - не учитывать регистр и использовать regexp при поиске

**Как убрать переносы строк?**

<code bash>
  $ sed ':a; /$/N; s/\n//; ta'
  # 1) метка 2) добавляем к текущей строке сдедующую (через \n) 3) удаляем разделитель 3) если команда s/// что-то сделала - переходим на метку.
</code>
===== Ссылки =====

  * http://rus-linux.net/MyLDP/consol/sed.html
  * http://citforum.ru/operating_systems/articles/tut_6.shtml
  * http://ant0.ru/sed1line.html (Рецепты)

