Avatar billede simon_lassen Nybegynder
04. juni 2002 - 09:48 Der er 11 kommentarer og
1 løsning

Skrive til en bestemt line i en fil...

Jeg har et shell-script hvor jeg har brug for at skrive til en fil på en bestemt line

Hvordan gør jeg det??


/Simon
Avatar billede Soren L. Hansen Nybegynder
04. juni 2002 - 14:48 #1
Hvis du vil indsætte noget efter fx linie 5 i en fil, der hedder klyt, så gør du som følger:

sed -e '6i\
Dette bliver indsat' klyt > klyt.tmp
mv klyt.tmp klyt
Avatar billede simon_lassen Nybegynder
04. juni 2002 - 15:59 #2
jeg skal afprøve det når jeg kommer på arbejde på torsdag.

Hvis det dur får du point der...
Avatar billede simon_lassen Nybegynder
06. juni 2002 - 10:15 #3
linuxkonsulent:

Det virker sådan set fint nok, men jeg havde ikke fortalt at det er en variabel jeg skal har ind på en bestemt line..

Kan du hjælpe mig med det??
Avatar billede peter_m Nybegynder
07. juni 2002 - 10:06 #4
Du kan gøre følgende

var = tekst
sed -e '6i\
'$var'' klyt > klyt.tmp
mv klyt.tmp klyt
Avatar billede simon_lassen Nybegynder
07. juni 2002 - 12:12 #5
Først tak til jer begge to. (I får point begge to)

Men jeg har dette problem.

Det her virker fint

var=tekst
sed -e '6i\
'$var'' klyt > klyt.tmp
mv klyt.tmp klyt

men det er jo ikke så fedt med en veriabel som er statisk, så derfor lavede jeg lidt om på den.

var=`uptime`
sed -e '6i\
'$var'' klyt > klyt.tmp
mv klyt.tmp klyt

Det er jo en meget lille ændring, og der burde virke. Men det viste sig at den er meget følsom over for "." og "mellemrum" Når disse indgår får men denne besked.

sed: can't read 12:08pm: No such file or directory
sed: can't read up: No such file or directory
sed: can't read 4: No such file or directory
sed: can't read days,: No such file or directory
sed: can't read 29: No such file or directory
sed: can't read min,: No such file or directory
sed: can't read 4: No such file or directory
sed: can't read users,: No such file or directory
sed: can't read load: No such file or directory
sed: can't read average:: No such file or directory
sed: can't read 0.00,: No such file or directory
sed: can't read 0.00,: No such file or directory
sed: can't read 0.00: No such file or directory

Det kan altså se ud som at den opfatter variablen som et filnavn..

Hvordan kommer jeg ud over dette???

Der vil være extra point til den der kan hjælpe mig med dette lille problem.

/Simon
Avatar billede Soren L. Hansen Nybegynder
07. juni 2002 - 13:20 #6
Nej, du skal gøre sådan:
sed -e "6i\
$VARIABLENAVN" klyt > klyt.tmp
mv klyt.tmp klyt
Avatar billede Soren L. Hansen Nybegynder
07. juni 2002 - 13:22 #7
Grunden til, det andet fejler er:
var=`uptime`
sed -e '6i\
'$var'' klyt > klyt.tmp
mv klyt.tmp klyt

Forklaring linie for linie:
var=`uptime` : Kommandoen uptime afvikles, og det den skriver til stdout havner i $var.
sed -e '6i\  : Her fortæller du, at på den sjette linie af det, sed får som input, skal den indsætte det, der kommer på næste linie.
'
Avatar billede Soren L. Hansen Nybegynder
07. juni 2002 - 13:33 #8
Ork, det var ikke meningen.. Prøver lige igen:
Grunden til, det andet fejler er:
var=`uptime`
sed -e '6i\
'$var'' klyt > klyt.tmp
mv klyt.tmp klyt

Forklaring linie for linie:
var=`uptime` : Kommandoen uptime afvikles, og det den skriver til stdout havner i $var.
sed -e '6i\  : Her fortæller du, at på den sjette linie af det, sed får som input, skal den indsætte det, der kommer på næste linie.
'$var'' klyt > klyt.tmp : Her bliver det så spændende. Tricket er at gennemskue, hvilke apostroffer, der hører sammen og den første på denne linie hører IKKE sammen med den næste, men med den sidste på forrige linie. Nu bliver det lidt svært at forklare.. Argumenterne bliver som følger sendt videre til  execve(2):
'sed' '-e' '6i\
' '13:30:33' 'up' '1' 'day,' '7:23,' '4' 'users,' 'load' 'average:' '0.16,' '0.18,' '0.27' 'klyt'

Det, du i virkeligheden ønskede var:
'sed' '-e' '6i\
13:30:33 up 1 day, 7:23, 4 users, load average: 0.16, 0.18, 0.27' klyt

Det er lidt svært at forklare uden at det bliver mere teknisk..
Avatar billede simon_lassen Nybegynder
07. juni 2002 - 14:00 #9
Stadigvæk lidt problemer....:-(

Sådan ser det ud.

#!/bin/bash


var=`uptime`


sed -e "6i\
$var" klyt > klyt.tmp
mv klyt.tmp klyt

og når jeg kører det får jeg denne fejl...

sed: -e expression #1, char 5: Extra characters after command

Hvad går jeg??

Det er en meget fin hjælp jeg får af dig, og det skal du have tak for:-)

/simon
Avatar billede Soren L. Hansen Nybegynder
07. juni 2002 - 15:49 #10
Det her er godt nok en af de der dage, du ved. :-)

Sådan her:
#!/bin/bash


var=`uptime`


sed -e "6i\\
$var" klyt > klyt.tmp
mv klyt.tmp klyt


Selv tak, i øvrigt. Bare husk os, hvis du skal bruge noget professionelt open source konsulentbistand i erhvervsøjemed. :-)
Avatar billede simon_lassen Nybegynder
07. juni 2002 - 22:20 #11
Jeg skal prøve det når jeg kommer på arbejde...

Jeg skal nok huske jer...

Jeg arbejder på sonofon, jeg er bare en smule ny inden for shell programeringen...

Igen tak!!!

/Simon
Avatar billede simon_lassen Nybegynder
11. juni 2002 - 11:28 #12
Det ser nu ud til at virke...

Tak for hjælpen..

Nu får du de første 45.

Jeg opretter et tomt spørgsmål med 45 point mere til dig... Der skal du bare oprette et svar så får du de point.


Mange tak for hjælpen..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester