sed -d

Contents
Пример
Удалить строку по её номеру
Удалить первые несколько строк
Удалить пустые строки
Удалить комментарии из кода
Удалить комментарии и пустые строки
Удалить строку в которой есть определённое слово/слова
Удалить строку в которой нет определённого паттерна
Удаление без 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

Banner Image

Удаление без d

Удалять из файлов можно и без применения d

Другие варианты удаления
Удаление переходов на новую строку
Обрезать файл - Удалить всё начиная с определённой строки
Удалить всё, что слева
Удалить всё, что справа
Удалить всё между скобками
Related Articles
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 on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat