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

Если вы решите добавить отступы внутри dodone : то есть отодвинуть, скажем, на четыре пробела текст в строках 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++ ))

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: