Sed


Начало работы

Использование Sed

Синтаксис ``Шелл-скрипт $ sed [options] command [input-file]


С конвейером
```Шелл-скрипт
$ cat report.txt | sed 's/Nick/John/g'
$ echo '123abc' | sed 's/[0-9]+//g'

Примеры опций

Опция Пример Описание
-i sed -ibak ’s/On/Off/’ php.ini Резервное копирование и прямое изменение входного файла
-E sed -E ’s/[0-9]+//g’ input-file Использование расширенных регулярных выражений
-n sed -n ‘3 p’ config.conf
-f sed -f script.sed config.conf Выполнить файл сценария sed
-e sed -e ‘command1’ -e ‘command2’ input-file Выполнение нескольких команд sed
{.show-header}

Множественные команды

``Шелл-скрипт {.wrap} $ echo “hello world” | sed -e ’s/h/H/g’ -e ’s/w/W/g’ Hello World

Используйте `-e` для выполнения нескольких команд sed



### Скрипт Sed
``Шелл-скрипт
$ echo 's/h/H/g' >> hello.sed
$ echo 's/w/W/g' >> hello.sed
$ echo "hello world" | sed -f hello.sed
Hello World

Используйте -f для выполнения файла сценария sed

Примеры

Шелл-скрипт $ sed ’s/old/new/g’ file.txt $ sed ’s/old/new/g’ file.txt > new.txt

$ sed ’s/old/new/g’ -i file.txt $ sed ’s/old/new/g’ -i.backup file.txt


См: [Примеры Sed](#sed-examples)



Команды Sed
-----------

### Команды {.col-span-2}

| Команда | Пример | Описание |
|---------|----------------------------------------|-----------------------------|
| `p` | sed -n '1,4 p' input.txt | Печать строк 1-4 |
| `p` | sed -n -e '1,4 p' -e '6,7 p' input.txt | Вывести строки 1-4 и 6-7 |
| `d` | sed '1,4 d' input.txt | Вывести строки, кроме 1-4 |
| `w` | sed -n '1,4 w output.txt' input.txt | Записать пробел шаблона в файл |
| | `a` | sed '2 a new-line' input.txt | Добавить строку после |
| `i` | sed '2 i new-line' input.txt | Вставить строку перед |
{.show-header}



### Команды с пробелами

| Команда | Описание |
|---------|--------------------------------------------------------------|
| `n` | Вывести пространство шаблона, пустое пространство шаблона и прочитать следующую строку |
| | `x` | Поменять место шаблона на место удержания |
| `h` | Скопировать место образца в место удержания |
| `H` | Добавить место образца к месту удержания |
| `g` | Скопировать пространство hold в пространство шаблона |
| `G` | Добавить место удержания к месту удержания |

См. также: [Интервал между файлами](#file-spacing)



### Флаги

``Шелл-скрипт
$ sed 's/old/new/[flags]' [input-file]

Флаг Описание
g Глобальная замена
1,2... Заменять n-ое вхождение
p Печатать только замененную строку
w Записать в файл только замененную строку
I Игнорировать регистр при поиске
e Заменить и выполнить в командной строке

Команды циклов

Команда Описание
b label Переход к метке (для циклов)
t label Переход к метке только при успешной замене(для циклов)
:label
N
P Печать 1-й строки в многострочном режиме
D Удалить 1-ю строку из нескольких строк

Misc Flags

Флаг Описание
`/ ^ @ ! #`
&
( ) \1 \2 \3 Группировка с помощью ( и ). Используйте \1, \2 в замене для ссылки на группу

Примеры Sed

Замена текста

Замена всех вхождений строки командный сценарий $ sed ’s/old/new/g’ file.txt

Заменить только n-ое вхождение строки
командный сценарий
$ sed 's/old/new/2' file.txt

Заменить строку только в 5-й строке сценарий $ sed ‘5 s/old/new/’ file.txt

Заменить "world" на "universe", но только если строка начинается с "hello"
```ll скрипт
$ sed '/hello/s/world/universe/' file.txt

Удалить “" из конца каждой строки

$ sed 's/\\\$//' file.txt

Удалить все пробельные символы из начала каждой строки

$ sed 's/^\s*//' file.txt

Удалите комментарии. Даже те, которые находятся в конце строки

$ sed 's/#.*$//' file.txt

Поиск текста

Поиск строки и вывод только тех строк, которые были найдены сценарий $ sed -n ‘/hello/p’ file.txt

Поиск без учета регистра
```Шелл-скрипт
$ sed -n '/hello/Ip' file.txt

Поиск строки, но выводятся только те строки, которые не совпадают

$ sed -n '/hello/!p' file.txt

Добавление строк

Добавьте строку после строки 2 ``Основной сценарий $ sed ‘2a Текст после строки 2’ file.txt

Добавить строку в конец файла
```Основной скрипт
$ sed '$a THE END!' file.txt

Добавление строки после каждой 3-й строки, начиная со строки 3 ``Основной скрипт $ sed ‘3~3a Некоторый текст’ file.txt




### Нумерация {.col-span-2}

Нумерация строк файла (простое выравнивание по левому краю)
Шелл-скрипт
$ sed = file.txt | sed 'N;s/\n/\t/'

Номерная строка файла (число слева, выравнивание справа) ``Волшебный скрипт $ sed = file.txt | sed ‘N;s/^/ /; s/ *(.{6,})\n/\1 /’


Нумеровать строки файла, но выводить числа только в том случае, если строка не пустая
``Основной сценарий
$ sed '/./=' file.txt | sed '/./N; s/\n/ /'

Подсчет строк (эмулирует “wc -l”)

$ sed -n '$='

Предоставление строк

Вставьте текст перед строкой 5 ``Основной сценарий $ sed ‘5i номер строки пять’ file.txt

Вставьте "Пример: " перед каждой строкой, содержащей "hello"
```Шелл-скрипт
$ sed '/hello/i Пример: ' file.txt

Удаление строк

Удаление строки 5-7 в файле ``Основной сценарий $ sed ‘5,7d’ file.txt

Удалить каждую 2-ю строку, начиная со строки 3
```Шелл-скрипт
$ sed '3~2d' file.txt

Удалить последнюю строку в файле

$ sed '$d' file.txt

Удалить строки, начинающиеся с “Hello” ``шелл-скрипт $ sed ‘/^Hello/d’ file.txt

Удалить все пустые строки
```Шелл-скрипт
$ sed '/^$/d' file.txt

Удалить строки, начинающиеся с “#”

$ sed '/^#/d' file.txt

Интервал между файлами

Двойной пробел Шелл-скрипт $ sed G


Удалить все пустые строки и двойной пробел
```ll скрипт
$ sed '/^$/d;G'

Тройной пробел в файле

$ sed 'G;G'

Отменить двойной пробел

$ sed 'n;d'

Вставка пустой строки над строкой, которая соответствует “regex”

$ sed '/regex/{x;p;x;}'

Вставить пустую строку под строкой, которая соответствует “regex”

$ sed '/regex/G'

Вставить пустую строку вокруг строки, которая соответствует “regex”

$ sed '/regex/{x;p;x;G;}'

Также смотрите