Ved visse lejligheder er vi nødt til at slette en bestemt linje fra en fil eller flere, for eksempel er det sket for mig, at jeg har haft en hel liste med filer, og jeg skal slette linje nr. 27 af alle disse (linje nr. 27 er en ACL , norm, regel, konfiguration), kan jeg enten redigere fil for fil, eller jeg kan bare opnå det, jeg har brug for ved hjælp af sed og et bash-script (valgfrit).
Men lad os prøve en enkelt fil noget enkel.
Vi har filen distros-deb.txt som indeholder dette:
debian
Kubuntu
ArchLinux
soluses
mynte
Med andre ord filen distros-deb.txt er det sted, hvor vi vil placere de Debian-baserede distroer, men der ser vi, at der i linje nr. 3 er "archlinux", en distro, der tydeligvis ikke har noget med Debian at gøre, så vi skal fjerne den linje. For at fjerne linje nr. 3 i den fil vil vi sætte følgende:
sed "3d" distros-deb.txt > distros-deb-ok.txt
At forklare denne linje er noget let, med tørstig "3d" vi indikerer, at vi sletter linje # 3 med distros-deb.txt Vi angiver, hvilken fil vi skal arbejde på, det vil sige linie nr. 3 i denne fil, indtil her, hvis vi trykker på Enter, vil det vise os, hvad vi vil have, men i terminalen, så med > distros-deb-ok.txt vi indikerer, at i stedet for at vise resultatet i terminalen, skal du lægge det i en fil med dette navn.
Hvad er simpelt?
Vi kan også undgå at bruge > distros-deb-ok.txt ved hjælp af en korrekt parameter for sed, parameteren -i
Hvis vi ønsker at fjerne linjen fra filen og gemme den med samme navn (og ikke i en anden fil), skal du blot tilføje parameteren -i :
sed -i "3d" distros-deb.txt
Dette fjerner linje nr. 3 fra distros-deb.txt og gemmer den.
Hvad hvis jeg vil have en række linjer, det vil sige at fjerne linje nr. 3, men også nr. 4 og nr. 5? For at opnå dette sætter vi området fra 3 til 5, det vil sige:
sed -i "3,5d" distros-deb.txt
Og det viser mig kun debian og kubuntu 😀
Så hvad hvis jeg vil slette fra linje 2 til den sidste, når jeg ikke kender de samlede linjer?
Brug bare dollarsymbolet - »$
sed -i "2,$d" distros-deb.txt
Hvis du vil fjerne fra første linje til nr. 4, sætter vi simpelthen værdien 1 i starten:
sed -i "1,4d" distros-deb.txt
Dette har været alt, et meget nyttigt tip, når du vil lave bash-scripts til at automatisere opgaver, og du skal ændre og fjerne linjer med konfigurationsfiler, for at ændre kan vi bruge sed o perl, såvel som for at eliminere, ved vi allerede, hvordan man gør det med sed 😉
hilsen
Meget godt bidrag 😉
Tak
Forresten, vi modtog din e-mail lige nu, jeg svarer dig 😀
hilsen
Som ypperstepræst for terminalen, servere og ssh-forbindelser kommer jeg til dig, åh store KZKG ^ Gaara, og jeg spørger dig: hvor kan jeg få en tutorial på niveau med min uvidenhed, der giver mig mulighed for at bruge ssh-forbindelser mellem to eksterne maskiner på forskellige netværk til at dele tekstfiler, pdf, billede og lyd (mp3)….
🙂
Seriøst, kan du guide mig i denne henseende, jeg har to maskiner, en på arbejde og en derhjemme, og jeg har brug for en ssh-forbindelse mellem dem (for som jeg forstår det, tillader ssh, at indhold kan deles mellem maskiner, har jeg ret?
Og hvis jeg tager fejl, hvilken applikation anbefaler du?
Og hvor finder jeg en grundlæggende tutorial i denne henseende?
scp
scp bruger @ machine_address: sti bruger @ machine_address: sti.
Samme syntaks som cp, kilde -> destination.
Du dukkede op mand, du var vild.
Godt tip!
Interessant tip ... xD
tilfældigvis kender du ikke en der får fed skrift til at skille sig ud?
Jeg mener, jeg har en txt-fil, der er en ordbog, den har mere end 10000 linjer, og jeg vil have den til at fremhæve bestemt tekst før ":" -opslæmningspunkterne og at gøre det en efter en er for meget.
Hej,
En txt-fil er almindelig tekst, som navnet antyder ... ren, uden formater eller noget lignende, jeg er ked af, men jeg tror, at det, du beder om, ikke kan gøres, kan det? 🙁
hilsen
faktisk kan det, men du bliver nødt til at kende destinationsformatet.
f.eks:
echo $ (echo "Robert: Hej. Skift her" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
det er et spørgsmål om at klare det.
den anden måde at slette, der kan bruges, er sed '/' $ 1 '/ d', men du skal være sikker på re.
gem derefter den i * .odt
Er der ikke en lettere måde at gøre det på med LibreOffice?
Kunne du slette en del af en linje og lade resten være?
Lad os sige, at jeg vil slette alt foran et ord i en bestemt række.
Eller slet alt, der følger ordet.
Ja, det er et spørgsmål om at trække en regex (om nødvendigt mand sed -r, –regexp-forlænget)
Fra det, jeg finder ud af
ekko «Robert: Hej. Skift her »| sed 's / Skift //'
med et veldefineret mønster og med. (et tegn) og * (mere end et)
derefter:
ekko «Robert: Hej. Skift her »| sed 's / Skift. * //'
før:
ekko «Robert: Hej. Skift her »| sed 's /. * Skift //'
Hvis det betyder noget, at ordet vises
ekko «Robert: Hej. Skift her »| sed 's / Skift. * / Skift /'
eller mere detaljeret
i linjen, der indeholder Robert, hvad der går efter Change
ekko -e «Fritz: Hej. Skift her \ nRobert: Hej. Skift her »| sed '/Robert/s/Cambio.*//'
eller som i begyndelsen tage den anden linje ud og behandle resten
ekko -e «Fritz: Hej. Skift her \ nRobert: Hej. Skift her \ nAndet »| sed -e 2d -e 's / Skift. * //'
ekko -e «Fritz: Hej. Skift her \ nRobert: Hej. Skift her \ nAndet »| sed '2d; s / Skift. * //'
Tak, det er meget nyttigt for mig.
Dejlig artikel, som jeg godt kan lide, hvor stor SysAdmin!
Hvad ville vores liv være uden sed, awek, perl, grep, hale, hoved, "Emacs" og så mange andre vigtige værktøjer!?
Tak, det var meget nyttigt.
Hej, og hvordan kunne du slette linje 1,4 og 10 i den samme kommando fra en fil?