În anumite ocazii trebuie să ștergem o anumită linie dintr-un fișier sau mai multe, de exemplu, mi s-a întâmplat să am o listă întreagă de fișiere și trebuie să șterg linia # 27 din toate acestea (linia # 27 este cea a unui ACL , normă, regulă, configurare), fie pot edita fișier cu fișier, fie pot realiza ceea ce am nevoie folosind comanda sete și un script bash (opțional).
Dar, să încercăm un singur fișier oarecum simplu.
Avem dosarul distros-deb.txt care conține acest lucru:
Debian
ubuntu
ArchLinux
soluze
mentă
Cu alte cuvinte, fișierul distros-deb.txt este în care vom pune distribuțiile bazate pe Debian, dar acolo vedem că în linia # 3 există „archlinux”, o distribuție care evident nu are nimic de-a face cu Debian, așa că trebuie să eliminăm acea linie. Pentru a elimina linia # 3 a acelui fișier vom pune următoarele:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Explicarea acestei linii este oarecum ușoară, cu sete "3d" indicăm că vom șterge linia # 3, cu distros-deb.txt Vă indicăm pe ce fișier să lucrați, adică ștergeți linia # 3 a acestui fișier, până aici, dacă apăsați Enter, ne va arăta ce vrem, dar în terminal, deci cu > distros-deb-ok.txt indicăm faptul că, în loc să afișăm rezultatul în terminal, îl pune într-un fișier cu acest nume.
Ce este simplu?
De asemenea, putem evita utilizarea > distros-deb-ok.txt folosind un parametru adecvat de sete, parametrul -i
Adică, în cazul în care dorim să ștergem linia din fișier și să o salvăm cu același nume (și nu într-un alt fișier), pur și simplu adăugați 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
Acesta a fost totul, un sfat foarte util atunci când doriți să creați scripturi bash pentru automatizarea sarcinilor și trebuie să modificați și să eliminați liniile de fișiere de configurare, pentru a modifica putem folosi sete o perl, precum și pentru a elimina știm deja cum să o facem cu sed 😉
În ceea ce priveşte
Contribuție foarte bună 😉
Mulțumesc
Apropo, am primit e-mailul dvs. chiar acum vă răspund 😀
În ceea ce priveşte
În calitate de mare preot al terminalului, serverelor și conexiunilor ssh vin la tine, oh, KZKG ^ Gaara, și te întreb: de unde pot obține un tutorial la nivelul ignoranței mele care îmi permite să folosesc conexiuni ssh între două mașini la distanță în rețele diferite pentru a le partaja fișiere text, pdf, imagine și sunet (mp3)….
????
Serios, m-ați putea ghida în acest sens, am două mașini, una la serviciu și una acasă și am nevoie de o conexiune ssh între ele (pentru că, așa cum am înțeles, ssh permite conținutul să fie partajat între mașini, mă înșel?)
Și dacă greșesc, ce aplicație recomandați?
Și unde găsesc un tutorial de bază în acest sens?
scp
scp user @ machine_address: user user @ machine_address: cale.
Aceeași sintaxă ca și cp, sursă -> destinație.
Ai apărut omule, ai fost pierdut.
Bun sfat!
Sfat interesant ... xD
întâmplător nu cunoașteți unul care să scoată în evidență textul îndrăzneț?
Adică, am un fișier txt care este un dicționar, are mai mult de 10000 de rânduri și vreau să evidențieze anumite texte înainte de „:” suspendarea punctelor și realizarea unu câte unul este prea mult.
Buna,
Un fișier txt este text simplu, așa cum sugerează și numele său ... simplu, fără formate sau ceva similar, îmi pare rău, dar cred că ceea ce cereți nu se poate face, nu-i așa? 🙁
În ceea ce priveşte
de fapt se poate, dar ar trebui să știți formatul destinației.
PE:
echo $ (echo "Robert: Hello. Change here" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
este o chestiune de a face față.
cealaltă modalitate de ștergere care poate fi utilizată este sed '/' $ 1 '/ d', dar trebuie să fii sigur de re.
apoi termină de salvat în * .odt
Nu există o modalitate mai ușoară de a face acest lucru cu LibreOffice?
Ați putea șterge o parte a unei linii și lăsați restul?
Să presupunem că vreau să șterg totul în fața unui cuvânt dintr-un anumit rând.
Sau ștergeți tot ce urmează acel cuvânt.
Da, este o chestiune de a trage o regex (dacă este necesar man sed -r, –regexp-Extended)
Plecând de la ceea ce găsesc
ecou «Robert: Bună ziua. Schimbați aici »| sed 's / Change //'
cu un model bine definit și cu. (un caracter) și * (mai mult de un)
După:
ecou «Robert: Bună ziua. Schimbați aici »| sed 's / Change. * //'
Inainte de:
ecou «Robert: Bună ziua. Schimbați aici »| sed 's /. * Change //'
Dacă contează că apare cuvântul
ecou «Robert: Bună ziua. Schimbați aici »| sed 's / Change. * / Change /'
sau mai elaborat
în linia care îl conține pe Robert ce se întâmplă după Schimbare
ecou -e «Fritz: Bună ziua. Schimbați aici \ nRobert: Bună ziua. Schimbați aici »| sed '/Robert/s/Cambio.*//'
sau ca la început scoateți a doua linie și procesați restul
ecou -e «Fritz: Bună ziua. Schimbați aici \ nRobert: Bună ziua. Schimbați aici \ nAlte »| sed -e 2d -e 's / Change. * //'
ecou -e «Fritz: Bună ziua. Schimbați aici \ nRobert: Bună ziua. Schimbați aici \ nAlte »| sed '2d; s / Change. * //'
Mulțumesc, este foarte util.
Frumos articol, unul dintre cele care îmi plac, cât de grozav este SysAdmin!
Ce ar fi viața noastră fără sed, awek, perl, grep, coadă, cap, „Emacs” și atâtea alte instrumente esențiale!?
Mulțumesc, a fost foarte util.
Bună ziua, și cum ai putea șterge liniile 1,4 și 10 din aceeași comandă dintr-un fișier?