sed -d

Содержание
Пример
Удалить строку по её номеру
Удалить первые несколько строк
Удалить пустые строки
Удалить комментарии из кода
Удалить комментарии и пустые строки
Удалить строку в которой есть определённое слово/слова
Удалить строку в которой нет определённого паттерна
Удаление без d:
Удалить всё, что слева
Удалить всё, что справа
Удаление переходов на новую строку
Обрезать файл - Удалить всё начиная с определённой строки
Статьи про SED

Пример

#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

ApplePen

Усложним условие - удалим все строки где есть слово 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

Другие варианты удаления
Удаление переходов на новую строку
Обрезать файл - Удалить всё начиная с определённой строки
Удалить всё, что слева
Удалить всё, что справа
Удалить всё между скобками

Article author: Andrei Olegovich

Похожие статьи
SED
find + sed
p: sed print
s: sed substitute
a i: append insert
Multiple commands
-e: --expression=script
d: Delete
sed via ssh
find + sed
Sustitution grouping
sed in vim
Linux
Bash
Bash Scripting
AWK
GREP

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su, info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: