Понякога се налага да премахнем конкретен ред от един или повече файлове. Например, имах цял списък с файлове и трябва да премахна ред #27 от всички тях (ред #27 е ACL, правило, конфигурация). Мога или да редактирам файл по файл, или просто да постигна това, което ми е необходимо, използвайки командата sed и bash скрипт (по избор).
Но нека опитаме един файл малко по-просто.
Имаме файла distros-deb.txt , който съдържа следното:
Debian
Kubuntu
archlinux
разтвори
мента
С други думи, файлът 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.
поздрави