sed -d
Пример
#pool 0.ubuntu.pool.ntp.org iburst #pool 1.ubuntu.pool.ntp.org iburst #pool 2.ubuntu.pool.ntp.org iburst #pool 3.ubuntu.pool.ntp.org iburst pool ntp.ubuntu.com
Удалить строки вида #pool 0.ubuntu.… можно командой
sed '/^#pool\s[0-9]\.ubuntu/ d' /etc/ntp.conf
Напоминаю, что \s означает один пробел
[0-9] означает одну любую цифру
Удалить строку по её номеру
test.txt
sed -i 3d test.txt
Удалить строку в которой нет определённого паттерна
Для таких операций можно использовать !d - это противоположная d операция - удалятся строки где паттерна нет, то есть останутся те, где паттерн присутствует.
sed '/паттерн/!d' file
Можно использовать -n
sed -n '/паттерн/p' file
Например в файле visited.log Есть строки вида
… https://www.heihei.ru/Finland/life/integration_course.php https://www.topbicycle.ru/m/usa/ https://www.topbicycle.ru/b/ https://www.heihei.ru/Finland/travel/ https://www.heihei.ru/Spain/cities/benalmadena/paloma.php https://eth1.ru/testing/edu/ …
Если стоит задача выписать в отдельный файл только посещения heihei.ru
sed '/heihei/!d' visited.log > hh.log
cat hh.log
…
https://www.heihei.ru/Finland/life/integration_course.php
https://www.heihei.ru/Finland/travel/
https://www.heihei.ru/Spain/cities/benalmadena/paloma.php
…
Удалить первые несколько строк
Допустим Вы хотите удалить три первые строки файла example.txt
sed -i -e 1,3d example.txt
Удалить пустые строки
Если строка действительно пустая, то подойдёт команда
sed '/^$/d'
Обычно жизнь более жестока, и в строках содержатся пробелы.
Удалить такие строки тоже можно
$ sed '/^[[:space:]]*$/d' input.txt > output.txt
Удалить комментарии
Допустим, у вас есть код или просто текст в котором много комментариев.
Строка с комментариями начинается с символа #
Рассмотрим файл
websites
cat websites
# Travel https://www.heihei.ru # Bicycles https://www.topbicycle.ru # IT https://www.eth1.ru
Чтобы удалить строки с комментариями выполните
sed -i '/^#/d' websites
Опция -i позволяет изменять текущий файл
Если хотите сохранить исходный файл а текст без комментариев записать в новы (если вы уже удалили комментарии - убедитесь, что вы их вернули обратно)
sed '/^#/d' websites > nocomments
cat nocomments
https://www.heihei.ru https://www.topbicycle.ru https://www.eth1.ru
Опция -i не нужна так как исходный файл мы не изменяли
Чтобы удалить строки с комментариями и пустые строки выполните
sed -i '/^#/d ; /^$/d' websites
Удалить комментарии и пустые строки
На примере nginx.conf
vi nginx.conf
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off;
sed -i.bak '/^\s*#/d;/^$/d' nginx.conf
vi nginx.conf
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; …
Удалить строку со словом
Удалить все строки где встречается слово Apple в файле input.txt
Here is an Apple Here Pen Here ApplePen
Integer is Here
Here is a Float
Here Pen Here Pineapple Here PineapplePen
Umm Apple Apple Apple Pen
Сделать это можно с помощью опции d
sed '/Apple/d' input.txt > output.txt
Результат:
Integer is Here
Here is a Float
Here Pen Here Pineapple Here PineapplePen

Усложним условие - удалим все строки где есть слово Pineapple и слово Integer
sed '/Pineapple\|Integer/d' input.txt > output.txt
| выступает в роли логического ИЛИ
\ нужна чтобы экранировать |
Результат:
Here is an Apple. Here is a Pen. Here is an ApplePen
Here is a Float
Umm Apple Apple Apple Pen
Удаление без d
Удалять из файлов можно и без применения d
Удаление переходов на новую строку |
Обрезать файл - Удалить всё начиная с определённой строки |
Удалить всё, что слева |
Удалить всё, что справа |
Удалить всё между скобками |