Іноді нам потрібно видалити певний рядок з одного або кількох файлів. Наприклад, у мене був цілий список файлів, і мені потрібно видалити рядок №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.
привіт