Ob določenih priložnostih moramo iz datoteke ali več izbrisati določeno vrstico, na primer, zgodilo se mi je, da imam cel seznam datotek in moram črtati številko 27 vseh (vrstica št. 27 je vrstica ACL , norma, pravilo, konfiguracija), lahko uredim datoteko za datoteko ali pa preprosto dosežem, kar potrebujem, z ukazom žeja in bash skript (neobvezno).
Toda poskusimo z eno samo datoteko, ki je nekoliko preprosta.
Datoteko imamo distros-deb.txt ki vsebuje to:
debian
kubuntu
archlinux
raztopine
Mint zelena
To je datoteka distros-deb.txt je del, v katerega bomo postavili distribucije, ki temeljijo na Debianu, toda tam vidimo, da je v vrstici # 3 "archlinux", distro, ki očitno nima nič skupnega z Debianom, zato moramo to vrstico odpraviti. Za odpravo vrstice št. 3 te datoteke bomo postavili naslednje:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Pojasniti to vrstico je nekoliko enostavno žeja "3d" označujemo, da bomo črto # 3 izbrisali z distros-deb.txt Označimo, s katero datoteko naj delamo, torej izbrišemo vrstico št. 3 te datoteke, vse do tukaj, če pritisnemo Enter, nam bo pokazala, kaj želimo, ampak v terminalu, tako da > distros-deb-ok.txt navajamo, da je namesto da bi rezultat prikazal v terminalu, dal v datoteko s tem imenom.
Kaj je preprosto?
Prav tako se lahko izognemo uporabi > distros-deb-ok.txt z uporabo ustreznega parametra žeja, parameter -i
To pomeni, da v primeru, da želimo vrstico odstraniti iz datoteke in jo shraniti z istim imenom (in ne v drugo datoteko), preprosto dodajte parameter -i :
sed -i "3d" distros-deb.txt
S tem boste vrstico št. 3 odstranili iz distros-deb.txt in jo shranili.
Kaj pa, če želim obseg vrstic, to je odstraniti vrstico # 3, pa tudi # 4 in # 5? Da bi to dosegli, postavimo razpon od 3 do 5, to je:
sed -i "3,5d" distros-deb.txt
Pokazal mi bo le debian in kubuntu 😀
Kaj torej, če želim izbrisati iz vrstice 2 do zadnje, ko ne vem skupnega števila vrstic?
Samo uporabite dolarski simbol - »$
sed -i "2,$d" distros-deb.txt
V primeru, da želite odstraniti iz prve vrstice na # 4, preprosto damo vrednost 1 na začetek:
sed -i "1,4d" distros-deb.txt
To je bilo vse, zelo koristen nasvet, če želite narediti bash skripte za avtomatizacijo nalog in morate spremeniti in odpraviti vrstice konfiguracijskih datotek, da jih lahko uporabimo žeja o perl, pa tudi za odpravo že vemo, kako to storiti s sed 😉
pozdrav
Zelo dober prispevek 😉
Hvala
Mimogrede, vaše e-poštno sporočilo smo prejeli zdaj, odgovarjam vam 😀
pozdrav
Kot veliki duhovnik terminala, strežnikov in ssh povezav pridem do vas, oh, odlični KZKG ^ Gaara, in vas vprašam: kje lahko dobim vadnico na ravni svojega neznanja, ki mi omogoča uporabo ssh povezav med dvema oddaljenima računalnikoma v različnih omrežjih za skupno rabo besedilnih datotek, pdf, slike in zvoka (mp3)….
🙂
Resno, bi me lahko glede tega usmeril, imam dva računalnika, enega v službi in enega doma in potrebujem ssh povezavo med njimi (ker, kot razumem, ssh omogoča skupno rabo vsebine med stroji, ali se motim?).
In če se motim, katero aplikacijo priporočate?
In kje najdem osnovno vadnico v zvezi s tem?
scp
scp uporabnik @ machine_address: pot uporabnik @ machine_address: pot.
Enaka sintaksa kot cp, vir -> cilj.
Pojavil si se človek, bil si izgubljen.
Dober nasvet!
Zanimiv namig ... xD
po naključju ne poznate tistega, zaradi katerega bi krepko besedilo izstopalo?
Mislim, imam datoteko txt, ki je slovar, ima več kot 10000 vrstic in želim, da poudari določeno besedilo pred zaustavitvijo točk ":" in to po eno, je preveč.
Pozdravljeni,
Datoteka txt je navadno besedilo, kot že ime pove ... navaden, brez formatov ali česar koli podobnega, žal mi je, ampak mislim, da tega, kar zahtevate, ni mogoče storiti, kajne? 🙁
pozdrav
dejansko lahko, vendar bi morali poznati ciljno obliko.
npr.
echo $ (echo "Robert: Pozdravljeni. Spremeni tukaj" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
vprašanje je, kako se rešiti.
drugi način brisanja, ki ga je mogoče uporabiti, je sed '/' $ 1 '/ d', vendar morate biti prepričani o ponovnem.
nato shranite v * .odt
Ali ni lažjega načina, da to storite z LibreOffice?
Bi lahko del vrstice izbrisali, ostalo pa pustili?
Recimo, da želim izbrisati vse pred besedo v določeni vrstici.
Ali pa izbrišite vse, kar sledi tej besedi.
Da, gre za vlečenje regularnega izraza (po potrebi man sed -r, –regexp-razširjen)
Izhajajoč iz tega, kar najdem
odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni //'
z natančno določenim vzorcem in z. (en znak) in * (več kot en)
Po:
odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni. * //'
Pred:
odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's /. * Spremeni //'
Če je pomembno, da se beseda pojavi
odmev «Robert: Pozdravljeni. Spremeni tukaj »| sed 's / Spremeni. * / Spremeni /'
ali bolj dodelan
v vrstici, ki vsebuje Roberta, kaj gre po spremembi
echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj »| sed '/Robert/s/Cambio.*//'
ali tako kot na začetku vzemite drugo vrstico in obdelajte preostalo
echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj \ nDrugo »| sed -e 2d -e 's / Spremeni. * //'
echo -e «Fritz: Pozdravljeni. Spremeni tukaj \ nRobert: Pozdravljeni. Spremeni tukaj \ nDrugo »| sed '2d; s / Spremeni. * //'
Hvala, zelo koristno mi je.
Lep članek, eden tistih, ki mi je všeč, kako super je SysAdmin!
Kakšno bi bilo naše življenje brez sed, awek, perl, grep, rep, glava, "Emacs" in toliko drugih bistvenih orodij!?
Hvala, bilo je zelo koristno.
Pozdravljeni, in kako lahko iz istega ukaza iz datoteke izbrišete vrstici 1,4 in 10?