Начало работы
Использование 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;}'
Также смотрите
- sed cheatsheet (gist.github.com)