U određenim prilikama moramo izbrisati određeni redak iz datoteke ili nekoliko njih, na primjer, dogodilo mi se da imam cijeli popis datoteka i moram izbrisati redak # 27 svih (redak # 27 je taj ACL-a, norme, pravila, konfiguracije), mogu uređivati datoteku po datoteku ili jednostavno postići ono što trebam pomoću naredbe žeđ i bash skriptu (nije obavezno).
Pokušajmo s jednom datotekom, donekle jednostavnom.
Imamo dosje distros-deb.txt koji sadrži ovo:
debian
ubuntu
Arch Linux
otopine
menta
Odnosno datoteka distros-deb.txt je u koji ćemo staviti distrose temeljene na Debianu, ali tamo vidimo da se u retku # 3 nalazi "archlinux", distro koji očito nema nikakve veze s Debianom, pa tu liniju moramo eliminirati. Da bismo eliminirali redak 3 te datoteke, stavit ćemo sljedeće:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Objasniti ovu liniju pomalo je jednostavno žeđ "3d" naznačujemo da ćemo izbrisati redak # 3 s distros-deb.txt Označavamo na kojoj datoteci ćemo raditi, odnosno brišemo red # 3 ove datoteke, sve do ovdje ako pritisnemo Enter pokazat će nam što želimo, ali u terminalu, tako da sa > distros-deb-ok.txt naznačujemo da umjesto prikazivanja rezultata u terminalu, da ga stavimo u datoteku s ovim imenom.
Što je jednostavno?
Također, možemo izbjeći upotrebu > distros-deb-ok.txt koristeći odgovarajući parametar žeđ, parametar -i
Odnosno, u slučaju da želimo izbrisati redak iz datoteke i spremiti je s istim imenom (a ne u drugu datoteku), jednostavno dodajte parametar -i :
sed -i "3d" distros-deb.txt
Ovo će ukloniti redak # 3 iz distros-deb.txt i spremiti ga.
Što 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 pokazat će mi samo debian i kubuntu
Pa što ako želim izbrisati iz retka 2 do posljednjeg, kad ne znam ukupan broj redaka?
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
Ovo je bilo sve, vrlo koristan savjet kada želite napraviti bash skripte za automatizaciju zadataka i trebate izmijeniti i eliminirati linije konfiguracijskih datoteka, da bismo ih mogli koristiti žeđ o perl, kao i eliminirati već znamo kako to učiniti sa sed-om
pozdravi
Vrlo dobar doprinos 😉
Hvala ti
Usput, upravo smo vam odgovorili e-poštom, odgovaram vam 😀
pozdravi
Kao vrhovni svećenik terminala, poslužitelja i ssh veza, dolazim k vama, o sjajni KZKG ^ Gaara, i pitam vas: gdje mogu dobiti vodič na razini svog neznanja koji mi omogućuje upotrebu ssh veza između dva udaljena stroja u različitim mrežama za razmjenu tekstualnih datoteka, pdf-a, slike i zvuka (mp3)….
????
Ozbiljno, možete li me uputiti u vezi s tim, imam dva stroja, jedan na poslu i jedan kod kuće i trebam ssh vezu između njih (jer kako razumijem, ssh omogućuje dijeljenje sadržaja između strojeva, jesam li u pravu? ).
A ako se varam, koju aplikaciju preporučujete?
I gdje mogu pronaći osnovnu lekciju u vezi s tim?
scp
scp user @ machine_address: path korisnik @ machine_address: path.
Ista sintaksa kao cp, izvor -> odredište.
Pojavio si se čovječe, bio si izgubljen.
Dobar savjet!
Zanimljiv savjet ... xD
slučajno ne poznajete onog po kojem se podebljani tekst ističe?
Mislim, imam txt datoteku koja je rječnik, ima više od 10000 redaka i želim da istakne određeni tekst prije nego što ":" obustavi točke i čini to jednu po jednu previše.
Pozdrav,
Txt datoteka je običan tekst, kao što naziv govori ... običan, bez formata ili bilo čega sličnog, žao mi je, ali mislim da ono što tražite ne može biti učinjeno, zar ne? 🙁
pozdravi
zapravo može, ali morali biste znati odredišni format.
npr:
echo $ (echo "Robert: Zdravo. Promijeni ovdje" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
pitanje je snalaska.
drugi način brisanja koji se može koristiti je sed '/' $ 1 '/ d', ali morate biti sigurni u ponovno.
zatim ga spremite u * .odt
Ne postoji li jednostavniji način za postizanje LibreOfficea?
Možete li izbrisati dio crte, a ostatak ostaviti?
Recimo da želim izbrisati sve ispred riječi u određenom redu.
Ili izbrišite sve što slijedi nakon te riječi.
Da, stvar je u povlačenju regularnog izraza (ako je potrebno čovječe sed -r, –regexp-prošireni)
Polazeći od onoga što nalazim
odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Change //'
s dobro definiranim uzorkom i sa. (jedan znak) i * (više od jednog)
tada je:
odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Promjena. * //'
Prije:
odjek «Robert: Zdravo. Promijeni ovdje »| sed 's /. * Promijeni //'
Ako je važno da se riječ pojavi
odjek «Robert: Zdravo. Promijeni ovdje »| sed 's / Change. * / Change /'
ili detaljnije
u retku koji sadrži Roberta što ide nakon Promjene
odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijeni ovdje »| sed '/Robert/s/Cambio.*//'
ili kao na početku izvadite drugi redak i obradite ostatak
odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijenite ovdje \ nOstalo »| sed -e 2d -e 's / Promjena. * //'
odjek -e «Fritz: Zdravo. Promijenite ovdje \ nRobert: Zdravo. Promijenite ovdje \ nOstalo »| sed '2d; s / Promjena. * //'
Hvala vam, vrlo mi je korisno.
Lijep članak, koji mi se sviđa, kako je sjajan SysAdmin!
Kakav bi bio naš život bez sed, awek, perl, grep, rep, glava, "Emacs" i toliko drugih bitnih alata!?
Hvala, bilo je vrlo korisno.
Pozdrav, a kako biste mogli izbrisati retke 1,4 i 10 iz datoteke u istoj naredbi?