Kako izbrisati određene redove iz datoteke koristeći sed

Ponekad trebamo ukloniti određeni red iz jedne ili više datoteka. Na primjer, imao sam cijelu listu datoteka i trebam ukloniti red #27 iz svih njih (red #27 je ACL, pravilo, konfiguracija). Mogu uređivati ​​datoteku po datoteku ili jednostavno postići ono što mi treba pomoću sed naredbe i bash skripte (opciono).

Pokušajmo sa jednom datotekom donekle jednostavno.

Imamo datoteku distros-deb.txt koja sadrži sljedeće:

debian

ubuntu

archlinux

solusi

mente

Drugim riječima, datoteka distros-deb.txt je mjesto gdje ćemo navesti distribucije bazirane na Debianu, ali vidimo da redak #3 sadrži "archlinux", distribuciju koja očito nema nikakve veze s Debianom, tako da moramo ukloniti taj redak. Da bismo uklonili redak #3 iz te datoteke, dodat ćemo sljedeće:

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

Objašnjenje ove linije je jednostavno: sa `sed "3d"` označavamo da ćemo izbrisati liniju #3, sa `distros-deb.txt` govorimo na kojoj datoteci da radi, odnosno da izbriše liniju #3 iz ove datoteke. Do ove tačke, ako pritisnemo `<kbd>Enter</kbd>`, prikazaće nam šta želimo, ali u terminalu, pa sa `>distros-deb-ok.txt` označavamo da umjesto prikazivanja rezultata u terminalu, treba da ga stavi u datoteku sa ovim imenom.

Šta je jednostavno?

Također možemo izbjeći korištenje datoteke > distros-deb-ok.txt korištenjem sed parametra , parametra -i .

Drugim riječima, ako želimo ukloniti liniju iz datoteke i sačuvati je pod istim imenom (a ne u drugoj datoteci), jednostavno trebamo dodati parametar -i :

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

Ovo će ukloniti red # 3 iz distros-deb.txt i spremiti ga.

Šta ako želim raspon linija, to jest ukloniti liniju # 3, ali i # 4 i # 5? Da bismo to postigli stavili smo raspon od 3 do 5, to jest:

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

I prikazat će mi samo debian i kubuntu 

Pa šta ako želim izbrisati iz reda 2 u zadnji, kad ne znam ukupan broj redova?

Samo upotrijebite simbol dolara - »$

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

U slučaju da želite eliminirati iz prvog retka u # 4, tada na početak jednostavno stavimo vrijednost 1:

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

To je otprilike to, prilično koristan savjet kada želite pisati bash skripte za automatizaciju zadataka i trebate modificirati i brisati linije u konfiguracijskim datotekama. Za modificiranje možemo koristiti sed ili perl , a za brisanje već znamo kako to učiniti sa sed-om.

Saludos


Dodaj kao preferirani izvor na Googleu