Vid vissa tillfällen behöver vi ta bort en specifik rad från en fil eller flera, till exempel har det hänt mig att jag har haft en hel lista med filer och jag måste ta bort rad # 27 av alla dessa (rad # 27 är att av en ACL, norm, regel, konfiguration), kan jag antingen redigera fil för fil eller så kan jag bara uppnå det jag behöver med kommandot törst och ett bash-skript (valfritt).
Men låt oss prova en enda fil något enkelt.
Vi har filen distros-deb.txt som innehåller detta:
debian
kubuntu
archlinux
soluses
mint
Med andra ord filen distros-deb.txt är där vi kommer att placera Debian-baserade distros, men där ser vi att i rad # 3 finns "archlinux", en distro som uppenbarligen inte har något att göra med Debian, så vi måste eliminera den linjen. För att eliminera rad nr 3 i den filen lägger vi följande:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Att förklara denna linje är något enkelt, med törstig "3d" vi indikerar att vi kommer att radera rad # 3, med distros-deb.txt Vi anger vilken fil vi ska arbeta med, det vill säga radera rad 3 i den här filen, upp till här om vi trycker på Enter kommer det att visa oss vad vi vill ha men i terminalen, så med > distros-deb-ok.txt vi indikerar att istället för att visa resultatet i terminalen, att det placeras i en fil med detta namn.
Vad är enkelt?
Vi kan också undvika att använda > distros-deb-ok.txt med en korrekt parameter för törst, parametern -i
Om vi vill ta bort raden från filen och spara den med samma namn (och inte i en annan fil), lägg bara till parametern -i :
sed -i "3d" distros-deb.txt
Detta tar bort rad # 3 från distros-deb.txt och sparar den.
Vad händer om jag vill ha ett antal rader, det vill säga att ta bort rad # 3 men också # 4 och # 5? För att uppnå detta lägger vi intervallet från 3 till 5, det vill säga:
sed -i "3,5d" distros-deb.txt
Och det visar mig bara debian och kubuntu 😀
Så vad händer om jag vill radera från rad 2 till den sista när jag inte känner till de totala raderna?
Använd bara dollarsymbolen - »$
sed -i "2,$d" distros-deb.txt
Om du vill eliminera från första raden till # 4 sätter vi helt enkelt värdet 1 i början:
sed -i "1,4d" distros-deb.txt
Detta har varit allt, ett mycket användbart tips när du vill skapa bash-skript för att automatisera uppgifter och du måste ändra och eliminera rader med konfigurationsfiler, för att ändra kan vi använda törst o perl, liksom att eliminera vet vi redan hur man gör det med sed 😉
hälsningar
Mycket bra bidrag 😉
Tack
Förresten, vi fick ditt e-postmeddelande just nu svarar jag dig 😀
hälsningar
Som överstepräst för terminalen, servrar och ssh-anslutningar kommer jag till dig, o jättebra KZKG ^ Gaara, och jag frågar dig: var kan jag få en handledning på nivån av min okunnighet som tillåter mig att använda ssh-anslutningar mellan två fjärrmaskiner på olika nätverk för att dela textfiler, pdf, bild och ljud (mp3)….
🙂
Seriöst, kan du vägleda mig i detta avseende, jag har två maskiner, en på jobbet och en hemma och jag behöver en ssh-anslutning mellan dem (för som jag förstår det, tillåter ssh att innehåll kan delas mellan maskiner, har jag rätt? ).
Och om jag har fel, vilken applikation rekommenderar du?
Och var hittar jag en grundläggande handledning i detta avseende?
scp
scp-användare @ machine_address: sökanvändare @ machine_address: sökväg.
Samma syntax som cp, källa -> destination.
Du visade upp mannen, du var vilse.
Bra tips!
Intressant tips ... xD
Känner du råkar en som gör att fet text sticker ut?
Jag menar, jag har en txt-fil som är en ordlista, den har mer än 10000 rader och jag vill att den ska markera viss text före ":" -upphängningspunkterna och att göra det en efter en är för mycket.
Hej,
En txt-fil är ren text, som namnet antyder ... vanlig, utan format eller något liknande, jag är ledsen men jag tror att det du frågar inte kan göras, eller hur? 🙁
hälsningar
faktiskt kan det, men du måste veta destinationsformatet.
t.ex:
echo $ (echo "Robert: Hej. Ändra här" | sed's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m / ')
det handlar om att klara.
det andra sättet att radera som kan användas är sed '/' $ 1 '/ d' men du måste vara säker på re.
spara sedan i * .odt
Finns det inte ett enklare sätt att göra det med LibreOffice?
Kan du ta bort en del av en rad och lämna resten?
Låt oss säga att jag vill ta bort allt framför ett ord i en viss rad.
Eller ta bort allt som följer det ordet.
Ja, det handlar om att dra en regex (vid behov man sed -r, –regexp-utvidgad)
Från det jag hittar
eko «Robert: Hej. Ändra här »| sed's / Change // '
med ett väldefinierat mönster och med. (ett tecken) och * (mer än ett)
då:
eko «Robert: Hej. Ändra här »| sed's / Change. * // '
tidigare:
eko «Robert: Hej. Ändra här »| sed's /. * Ändra // '
Om det betyder något att ordet dyker upp
eko «Robert: Hej. Ändra här »| sed's / Change. * / Change / '
eller mer detaljerad
i raden som innehåller Robert vad som går efter Change
eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här »| sed '/Robert/s/Cambio.*//'
eller som i början ta ut andra raden och bearbeta resten
eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här \ nAndra »| sed -e 2d -e's / Ändra. * // '
eko -e «Fritz: Hej. Ändra här \ nRobert: Hej. Ändra här \ nAndra »| sed '2d; s / Ändra. * //'
Tack, det är mycket användbart för mig.
Trevlig artikel, de jag gillar, hur bra SysAdmin!
Vad skulle vårt liv vara utan sed, awek, perl, grep, svans, huvud, "Emacs" och så många andra viktiga verktyg!?
Tack, det var till stor hjälp.
Hej, och hur kan du radera raderna 1,4 och 10 i samma kommando från en fil?