tag: #N/S/Synthesizing #N/T/Linux #N/T/Tool/Util #N/T/Public
2021-08-10 13:34, [Source](),
Related: [[% awk]],
Docs: [aidalinux](https://aidalinux.ru/w/Sed)
## Описание
## Шаблон
```bash
```
## Примеры:
######
```bash
```
### Шпаргалки:
##### Заменить несколько паттернов в нескольких файлах.
```bash
sed -i -e 's/pass/passs2/g' -e 's/localhost/192.168.128.14/g' /etc/postfix/mysql/* /etc/dovecot/dovecot-sql.conf
```
##### Сед для каждого файла в списке файлов.
```bash
cat filelist | xargs -I{} sed -i '...' {}
```
[[% xargs]]
##### Строку №5 переместить на №15
```bash
sed -e '5{h;d;};15G' -i '' <файл>
5 — сопоставление адреса строки 5
{ — начало блочной команды
h — сохраняет строку в буфер
d — удаляет её из вывода
} — конец блочной команды
15 — сопоставление строки 15
G — добавляет строку из буфера в конец текущей строки
```
##### заменить строку, если найдена, или добавить в конец файла, если не найдена (правка конфигов)
```bash
sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile
```
При таком подходе вы просто печатаете все, кроме линии, которую хотите отбросить, а затем в конце добавляете замену.
``` bash
sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile
```
если строка соответствует, просто скопируйте ее в `h`старое пространство, затем `s`замените значение.
В конце `
строки `x`измените удерживающее пространство и пространство образца, затем проверьте, является ли последнее пустым. Если он не пустой, значит, замена уже сделана, так что ничего не поделать. Если он пуст, это означает, что совпадение не найдено, поэтому замените пространство шаблона на требуемую _переменную = значение, а_ затем добавьте к текущей строке в буфере удержания. Наконец, `x`снова изменим:
###### Добавить в начало и конец файла
```bash
sed -i -e '1i Header' -e '$a Trailor' sa
-i:
Edits the file in place
-e script:
Add the script to the commands to be executed
'1i Header':
Match 1st line ('1') and insert ('i') 'Header'
'$a Trailor':
Match last line (') and append ('a') 'Trailor'
```
#### Вывести строку по номеру
```bash
sed -n -e Xp -e Yp FILENAME
```
или
```bash
sed -n -e 120p -e 145p -e 1050p /var/log/syslog
```
sed : команда, которая по умолчанию выводит все без исключения строки
-n : подавление вывода
-e CMD : исполняемая команда
Xp: вывод строки под номером X
Yp: вывод строки под номером Y
FILENAME : имя обрабатываемого файла
##### Печатать диапазон строк
```bash
sed -n '46,49 p' file.txt
sed -n '16224,16482p;16483q' filename
```
#### Добавить симовлы в начало каждой строки: (закомментировать весь файл)
```bash
sed 's/^/#/' file.txt
```
##### Показать количество строк в файле
```bash
$ sed -n '$=' programming.txt
10
```
##### Удалить несколько патернов из файла
```bash
sed '/test/{/error\|critical\|warning/d}' somefile
```
####
```bash
```
## Используемые или важные ключи.
p - Print out the pattern space (to the standard output). This command is usually only used in conjunction with the -n command-line option.
n - If auto-print is not disabled, print the pattern space, then, regardless, replace the pattern space with the next line of input. If there is no more input then sed exits without processing any more commands.
q - Exit sed without processing any more commands or input. Note that the current pattern space is printed if auto-print is not disabled with the -n option.
### Файлы