Как удалить определенные строки из файла с помощью sed

В определенных случаях нам нужно удалить определенную строку из файла или нескольких, например, со мной случилось, что у меня был целый список файлов, и мне нужно удалить строку № 27 из всех них (строка № 27 - это то, что ACL, нормы, правила, конфигурации), я могу либо редактировать файл за файлом, либо просто достичь того, что мне нужно, с помощью команды СЕПГ и сценарий bash (необязательно).

Но давайте попробуем один файл несколько проще.

У нас есть файл дистрибутивы-deb.txt который содержит это:

Debian

Kubuntu

Archlinux

Soluses

мята

Другими словами, файл дистрибутивы-deb.txt - это то, в которое мы поместим дистрибутивы на основе Debian, но там мы видим, что в строке №3 находится «archlinux», дистрибутив, который явно не имеет ничего общего с Debian, поэтому мы должны исключить эту строку. Чтобы исключить строку № 3 этого файла, мы поместим следующее:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Объяснить эту строку довольно просто, используя жаждущий "3d" мы указываем, что удалим строку №3 с дистрибутивы-deb.txt Мы указываем, с каким файлом работать, то есть удаляем строку №3 этого файла, и до этого момента, если мы нажмем Enter, она покажет нам, что мы хотим, но в терминале, поэтому с > дистрибутив-деб-ок.txt мы указываем, что вместо отображения результата в терминале он помещает его в файл с этим именем.

Что просто?

Кроме того, мы можем избежать использования > дистрибутив-деб-ок.txt используя правильный параметр СЕПГ, параметр -i

То есть на случай, если мы хотим удалить строку из файла и сохранить ее с тем же именем (а не в другом файле), просто добавьте параметр -i :

sed -i "3d" distros-deb.txt

Это удалит строку №3 из distros-deb.txt и сохранит ее.

Что, если мне нужен диапазон строк, то есть удалить строку №3, но также строки №4 и №5? Для этого мы ставим диапазон от 3 до 5, то есть:

sed -i "3,5d" distros-deb.txt

И он покажет мне только Debian и Kubuntu 

Так что, если я хочу удалить строку со 2 до последней, когда я не знаю всего строк?

Просто используйте символ доллара - »$

sed -i "2,$d" distros-deb.txt

В случае, если вы хотите исключить из первой строки до # 4, мы просто помещаем значение 1 в начало:

sed -i "1,4d" distros-deb.txt

Это было все, очень полезный совет, когда вы хотите создавать сценарии bash для автоматизации задач, и вам нужно изменить и удалить строки файлов конфигурации, чтобы изменить, мы можем использовать СЕПГ o Perl, а также устранять мы уже умеем это делать с помощью sed 

привет


Добавить в качестве предпочтительного источника в Google