sed substitute
Чтобы использовать команду sed substitute нужна опция 's'
Общий синтаксис выглядит так:
sed '[range] s/<string>/<replacement>/' file
Перевод
sed ' [диапазон] s/<строка>/<замена>/' файл
range - это область в которой нужно делать замену. Задаётся через условие. Всегда должен быть внутри / /
string - это набор символов который нужно заменить
replacement - это набор символов на который заменяется string
file - это имя файла (можно с путём до файла) в котором эта замена будет произведена
Рассмотрим файл input.txt
cat input.txt
lex red red test red muha lex red red lex red lex blue
Заменим red на yellow, но не везде, а только там где строка начинается с lex
sed -i '/^lex/ s/red/yellow/' input.txt
cat input.txt
lex yellow red test red muha lex red red lex yellow lex blue
/^lex/ - замену нужно делать только в тех строках, которые начинаются с lex - так мы задали range
Если не задавать range то в каждой строке первый red будет заменён на yellow
sed -i 's/red/yellow/' input.txt
cat input.txt
lex yellow yellow test yellow muha lex yellow red lex yellow lex blue
Чтобы заменить вообще все red на yellow - нужно добавить опцию g (greed - жадность)
sed -i 's/red/yellow/g' input.txt
cat input.txt
lex yellow yellow test yellow muha lex yellow yellow lex yellow lex blue
Добавить отступы
Рассмотрим скрипт script.sh
nl -ba script.sh
1 #!/bin/bash 2 3 i=0 4 while [ $i -le 3 ] 5 do 6 echo "i= " 7 echo $i 8 (( i++ )) 9 done
Если вы решите добавить отступы внутри do … done : то есть отодвинуть, скажем, на четыре пробела текст в строках 6, 7 и 8 - выполните
sed -i ' 6,8 s/^/ /g' script.sh
nl -ba script.sh
1 #!/bin/bash 2 3 i=0 4 while [ $i -le 3 ] 5 do 6 echo "i= " 7 echo $i 8 (( i++ )) 9 done
Предупреждаю, что если у вас в скрипте есть пустые строки - nl их считать не будет а sed будет - поэтому я использовал nl с опциями ba
Если вносить изменения в исходный файл не нужно - можно использовать
sed -n ' 6,8 s/^/ /p' script.sh
echo "i= " echo $i (( i++ ))