Cum să ștergeți anumite linii dintr-un fișier folosind sed

Uneori trebuie să eliminăm o anumită linie dintr-unul sau mai multe fișiere. De exemplu, am avut o listă întreagă de fișiere și trebuie să elimin linia #27 din toate (linia #27 este un ACL, o regulă, o configurație). Pot fie să editez fișier cu fișier, fie pot pur și simplu să obțin ceea ce am nevoie folosind comanda sed și un script bash (opțional).

Dar, să încercăm un singur fișier oarecum simplu.

Avem fișierul distros-deb.txt care conține următoarele:

Debian

ubuntu

ArchLinux

soluze

mentă

Cu alte cuvinte, fișierul distros-deb.txt este locul unde vom lista distribuțiile bazate pe Debian, dar vedem că linia #3 conține „archlinux”, o distribuție care în mod clar nu are nicio legătură cu Debian, așa că trebuie să eliminăm acea linie. Pentru a elimina linia #3 din acel fișier, vom adăuga următoarele:

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

Explicarea acestei linii este simplă: cu `sed "3d"` indicăm că vom șterge linia #3, cu `distros-deb.txt` îi spunem asupra cărui fișier să lucreze, adică să șteargă linia #3 din acest fișier. Până în acest punct, dacă apăsăm `<kbd>Enter</kbd>`, ne va arăta ce dorim, dar în terminal, așa că cu `> distros-deb-ok.txt` indicăm că, în loc să afișeze rezultatul în terminal, ar trebui să îl pună într-un fișier cu acest nume.

Ce este simplu?

De asemenea, putem evita utilizarea fișierului > distros-deb-ok.txt folosind un parametru sed , parametrul -i

Cu alte cuvinte, dacă vrem să eliminăm linia din fișier și să o salvăm cu același nume (și nu într-un alt fișier), trebuie pur și simplu să adăugăm parametrul -i :

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

Aceasta va elimina linia # 3 din distros-deb.txt și o va salva.

Ce se întâmplă dacă vreau o gamă de linii, adică să elimin linia # 3, dar și # 4 și # 5? Pentru a realiza acest lucru, punem intervalul de la 3 la 5, adică:

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

Și îmi va arăta doar debian și kubuntu 

Deci, dacă vreau să șterg de la linia 2 până la ultima, când nu știu liniile totale?

Folosiți doar simbolul dolar - »$

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

În cazul în care doriți să eliminați de la prima linie la # 4, atunci pur și simplu punem valoarea 1 la început:

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

Cam asta e tot, un sfat destul de util atunci când vrei să scrii scripturi bash pentru a automatiza sarcini și trebuie să modifici și să ștergi linii din fișierele de configurare. Pentru a modifica, putem folosi sed sau perl , iar pentru a șterge, știm deja cum să o facem cu sed.

În ceea ce priveşte


Adăugați ca sursă preferată în Google