Sed
Параметры
- -i - Не обращать внимание на регистр
- -e - Использовать регулярные выражения
Документация
Замена в файле
- sed -e 's/oldstuff/newstuff/g' inputFileName > outputFileName
Нельзя указывать одинаковый исходящий и принимающий файл. Врезультате его длина будет = 0
Замена без временного файла
- 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 при поиске
Как убрать переносы строк?
$ sed':a; /$/N; s/\n//; ta'# 1) метка 2) добавляем к текущей строке сдедующую (через \n) 3) удаляем разделитель 3) если команда s/// что-то сделала - переходим на метку.