Як видалити певні рядки з файлу за допомогою sed

Іноді нам потрібно видалити певний рядок з одного або кількох файлів. Наприклад, у мене був цілий список файлів, і мені потрібно видалити рядок №27 з усіх них (рядок №27 – це ACL, правило, конфігурація). Я можу або редагувати файл за файлом, або просто досягти потрібного результату за допомогою команди sed та bash-скрипта (необов'язково).

Але спробуємо один файл дещо простіший.

У нас є файл distros-deb.txt , який містить ось це:

Debian

kubuntu

Арклінукс

розчини

м'ята

Іншими словами, файл distros-deb.txt – це місце, де ми перерахуємо дистрибутиви на основі Debian, але ми бачимо, що рядок №3 містить «archlinux» – дистрибутив, який явно не має нічого спільного з Debian, тому нам потрібно видалити цей рядок. Щоб видалити рядок №3 з цього файлу, ми додамо наступне:

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

Пояснити цей рядок легко: за допомогою `sed "3d"` ми вказуємо, що видалимо рядок №3, за допомогою `distros-deb.txt` ми вказуємо, з яким файлом працювати, тобто видалити рядок №3 з цього файлу. До цього моменту, якщо ми натиснули `<kbd>Enter</kbd>`, нам показували потрібний результат у терміналі, тому за допомогою `>distros-deb-ok.txt` ми вказуємо, що замість показу результату в терміналі його слід помістити у файл з цією назвою.

Що просто?

Ми також можемо уникнути використання > distros-deb-ok.txt , використовуючи параметр sed , параметр -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-скрипти для автоматизації завдань і вам потрібно змінювати та видаляти рядки у файлах конфігурації. Для зміни ми можемо використовувати sed або perl , а для видалення ми вже знаємо, як це зробити за допомогою sed.

привіт


Додати як пріоритетне джерело в Google