Ved visse anledninger trenger vi å slette en bestemt linje fra en fil eller flere, for eksempel har det hendt meg at jeg har hatt en hel liste med filer, og jeg må slette linje nr. 27 av alle disse (linje nr. 27 er at av en ACL, norm, regel, konfigurasjon), kan jeg enten redigere filen for fil eller jeg kan bare oppnå det jeg trenger ved hjelp av kommandoen tørste og et bash-skript (valgfritt).
Men la oss prøve en enkelt fil litt enkel.
Vi har filen distros-deb.txt som inneholder dette:
debian
ubuntu
Arch Linux
soluses
mynte
Med andre ord filen distros-deb.txt er der vi vil sette de Debian-baserte distroene, men der ser vi at i linje 3 er det "archlinux", en distro som åpenbart ikke har noe med Debian å gjøre, så vi må eliminere den linjen. For å eliminere linje 3 i den filen vil vi sette følgende:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Å forklare denne linjen er noe enkelt, med tørst "3d" vi indikerer at vi vil slette linje # 3, med distros-deb.txt Vi indikerer hvilken fil vi skal jobbe med, det vil si slette linje nr. 3 i denne filen, opp til her hvis vi trykker Enter vil den vise oss hva vi vil ha, men i terminalen, så med > distros-deb-ok.txt vi indikerer at i stedet for å vise resultatet i terminalen, at det la det i en fil med dette navnet.
Hva er enkelt?
Vi kan også unngå å bruke > distros-deb-ok.txt bruker en riktig parameter for tørste, parameteren -i
Hvis vi vil slette linjen fra filen og lagre den med samme navn (og ikke i en annen fil), er det bare å legge til parameteren -i :
sed -i "3d" distros-deb.txt
Dette fjerner linje 3 fra distros-deb.txt og lagrer den.
Hva om jeg vil ha en rekke linjer, det vil si å fjerne linje nr. 3, men også nr. 4 og nr. 5? For å oppnå dette setter vi området fra 3 til 5, det vil si:
sed -i "3,5d" distros-deb.txt
Og den viser meg bare debian og kubuntu
Så hva om jeg vil slette fra linje 2 til den siste når jeg ikke kjenner de totale linjene?
Bare bruk dollarsymbolet - »$
sed -i "2,$d" distros-deb.txt
Hvis du vil eliminere fra første linje til # 4, setter vi ganske enkelt verdien 1 i begynnelsen:
sed -i "1,4d" distros-deb.txt
Dette har vært alt, et veldig nyttig tips når du vil lage bash-skript for å automatisere oppgaver, og du må endre og eliminere linjer med konfigurasjonsfiler, for å endre kan vi bruke tørste o perl, i tillegg til å eliminere vet vi allerede hvordan vi gjør det med sed
Hilsen
Veldig bra bidrag 😉
Takk
Forresten, vi mottok e-posten din akkurat nå svarer jeg deg 😀
Hilsen
Som yppersteprest for terminalen, servere og ssh-forbindelser kommer jeg til deg, oh stor KZKG ^ Gaara, og jeg spør deg: hvor kan jeg få en opplæring på nivået av min uvitenhet som lar meg bruke ssh-forbindelser mellom to eksterne maskiner på forskjellige nettverk for å dele tekstfiler, pdf, bilde og lyd (mp3)….
????
Seriøst, kan du veilede meg i denne forbindelse, jeg har to maskiner, en på jobb og en hjemme, og jeg trenger en ssh-forbindelse mellom de to (for slik jeg forstår det, lar ssh innhold deles mellom maskiner, har jeg rett ?).
Og hvis jeg tar feil, hvilken applikasjon anbefaler du?
Og hvor finner jeg en grunnleggende veiledning i denne forbindelse?
scp
scp bruker @ maskinadresse: sti bruker @ maskinadresse: sti.
Samme syntaks som cp, kilde -> destinasjon.
Du dukket opp mann, du var tapt.
Godt tips!
Interessant tips ... xD
Kjenner du tilfeldigvis en som gjør at fet tekst skiller seg ut?
Jeg mener, jeg har en txt-fil som er en ordbok, den har mer enn 10000 XNUMX linjer, og jeg vil at den skal fremheve viss tekst før ":" - suspensjonspunktene og å gjøre det en etter en er for mye.
Hei,
En txt-fil er ren tekst, som navnet antyder ... ren, uten formater eller noe lignende, jeg beklager, men jeg tror ikke det du spør kan gjøres, kan det? 🙁
Hilsen
faktisk kan det, men du må vite destinasjonsformatet.
f.eks:
ekko $ (ekko "Robert: Hei. Endre her" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
det handler om mestring.
den andre måten å slette som kan brukes er sed '/' $ 1 '/ d', men du må være sikker på re.
lagre den deretter i * .odt
Er det ikke en enklere måte å gjøre det med LibreOffice?
Kan du slette en del av en linje og la resten være?
La oss si at jeg vil slette alt foran et ord i en bestemt rad.
Eller slett alt som følger ordet.
Ja, det er snakk om å trekke en regex (om nødvendig mann sed -r, –regexp-utvidet)
Fra det jeg finner
ekko «Robert: Hei. Endre her »| sed 's / Change //'
med et veldefinert mønster og med. (ett tegn) og * (mer enn ett)
deretter:
ekko «Robert: Hei. Endre her »| sed 's / Endre. * //'
Før:
ekko «Robert: Hei. Endre her »| sed 's /. * Endre //'
Hvis det betyr noe at ordet dukker opp
ekko «Robert: Hei. Endre her »| sed 's / Endre. * / Endre /'
eller mer forseggjort
i linjen som inneholder Robert hva som går etter Change
ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her »| sed '/Robert/s/Cambio.*//'
eller som i begynnelsen ta ut andre linje og behandle resten
ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her \ nAndre »| sed -e 2d -e 's / Endre. * //'
ekko -e «Fritz: Hei. Endre her \ nRobert: Hei. Endre her \ nAndre »| sed '2d; s / Endre. * //'
Takk, det er veldig nyttig for meg.
Fin artikkel, som jeg liker, hvor flott SysAdmin!
Hva ville livet vårt vært uten sed, awek, perl, grep, tail, head, "Emacs" og så mange andre viktige verktøy!?
Takk, det var veldig nyttig.
Hei, og hvordan kunne du slette linje 1,4 og 10 i samme kommando fra en fil?