hmmm jeg er ved at lave et script til diverse opsætninger osv og er støt på et lille problem.
jeg ved at jeg kan tilføje linier til en fil med echo XXX >>fil
er der på samme måde en måde hvorpå man kan fjerne en linie indeholdende yyy
eller endnu bedre ændre yyy til XXX således ændringer kan laves automatisk uden at brugeren skal ind og taste ting manuelt
ændre /slette linier i fil fra terminalen
-
- Indlæg: 3461
- Tilmeldt: 27. sep 2008, 23:51
- IRC nickname: sound
- Geografisk sted: København
-
- Indlæg: 5095
- Tilmeldt: 27. apr 2008, 02:16
- IRC nickname: lars_t_h
- Geografisk sted: Fyn
Re: ændre /slette linier i fil fra terminalen
soundpartner skrev:hmmm jeg er ved at lave et script til diverse opsætninger osv og er støt på et lille problem.
jeg ved at jeg kan tilføje linier til en fil med echo XXX >>fil
er der på samme måde en måde hvorpå man kan fjerne en linie indeholdende yyy
eller endnu bedre ændre yyy til XXX således ændringer kan laves automatisk uden at brugeren skal ind og taste ting manuelt
Du skriver ikke hvor meget ny du er ud i programmering, så jeg antager at du er newbie:
Lad os først antage at du har en input-fil (lad os kalde den I1), og at du også kalder "fil i "echo XXX >> fil" for outputfilen O1.
Man bruger normalt en løkke konstruktion (for/foreach loop).
Du kan bruge en tæller variabel til at hode styr på hvilken linie du arbejder på i input-filen I1.
Bestemte linier kan du så undlade at kopiere fra I1 til O1 ved at bruge 2 interval variabler (en min linie variabel, og en max linie variabel) ved at bruge nogle if sætninger. If sætningerne skal bruge sammenligninger imellem linietæller variablen, og de 2 intervalvariabler.
Visse scripting sprog (andet end BASH shell scripting) kan være mere velegnet til det du er ved at lave, men der går meget nemt religion i (scripting) programmeringssprog. Det er et meget følsomt emne at tage op, så du må selv finde ud af hvad der er bedst for dit arbejde.
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
-
- Indlæg: 59
- Tilmeldt: 18. jun 2008, 21:23
- IRC nickname: shiyee
- Geografisk sted: Aalborg, Denmark
Re: ændre /slette linier i fil fra terminalen
Et værktøj der passer godt til den opgave du beskriver er "sed"
Se iøvrigt "man sed". Bemærk at "s/^yyy$/XXX/" er et regulært udtryk. Det betyder:
Kode: Vælg alt
sed -i -e 's/^yyy$/XXX/' filnavn
Se iøvrigt "man sed". Bemærk at "s/^yyy$/XXX/" er et regulært udtryk. Det betyder:
Kode: Vælg alt
s - søg og erstat
/ separator
^yyy$ hvad vi søger efter - her ^ = start af linje efterfulgt af yyy, og til sidst $ = slut af linje
/ separator
XXX hvad vi erstatter med
/ separator
-
- Indlæg: 3461
- Tilmeldt: 27. sep 2008, 23:51
- IRC nickname: sound
- Geografisk sted: København
Re: ændre /slette linier i fil fra terminalen
mchro skrev:Et værktøj der passer godt til den opgave du beskriver er "sed"Kode: Vælg alt
sed -i -e 's/^yyy$/XXX/' filnavn
Se iøvrigt "man sed". Bemærk at "s/^yyy$/XXX/" er et regulært udtryk. Det betyder:Kode: Vælg alt
s - søg og erstat
/ separator
^yyy$ hvad vi søger efter - her ^ = start af linje efterfulgt af yyy, og til sidst $ = slut af linje
/ separator
XXX hvad vi erstatter med
/ separator
det ser lovende ud. men hvad nu hvis der er både " og / i det der skal søges og erstattes? man kan jo ikke bare sætte " rundt om da der også er " i teksten der skal søges/erstattes og med / der vil det jo stoppe for tidligt da der er / midt i det der skal søges/erstattes.
-
- Indlæg: 59
- Tilmeldt: 18. jun 2008, 21:23
- IRC nickname: shiyee
- Geografisk sted: Aalborg, Denmark
Re: ændre /slette linier i fil fra terminalen
soundpartner skrev:det ser lovende ud. men hvad nu hvis der er både " og / i det der skal søges og erstattes? man kan jo ikke bare sætte " rundt om da der også er " i teksten der skal søges/erstattes og med / der vil det jo stoppe for tidligt da der er / midt i det der skal søges/erstattes.
Så skal du escape tegnene, f.x. bliver " til \" og / til \/
Det kan godt blive lidt noget rod - derfor kan du vælge en anden separator end /. Det er bare tegnet efter s'et der tæller.