Как да изтрия конкретни редове от файл, използвайки sed

Понякога се налага да премахнем конкретен ред от един или повече файлове. Например, имах цял списък с файлове и трябва да премахна ред #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.

поздрави


Добавяне като предпочитан източник в Google