Ta bort rad i textfil [löst]

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Ta bort rad i textfil [löst]

Inlägg av rylleman »

Jag försöker i ett skript få bort en rad från en textfil men jag lyckas inte hur jag än gör.

just nu ser kodraden jag försöker med ut såhär;

Kod: Markera allt

sed "s/$stripped.lst//" $stripped.lst
Alltså, texten på raden är samma som filnamnet som bestäms på annat håll i skriptet.
Jag har provat otaliga varianter på min sed-rad utan att få till det.

Någon som kan vägleda?
Senast redigerad av 2 rylleman, redigerad totalt 3 gång.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Ta bort rad i textfil

Inlägg av Konservburk »

Det är för det första skillnad på att ta bort en rad och ta bort alla tecken på en rad. I det ena fallet blir det en rad mindre i filen, i det andra blir det en tomrad kvar istället.

Men med din sed-kod tas inte ens alla tecken bort, utan bara bara exakt de tecken som ingår i värdet av variabeln $stripped.lst.

Det viktigaste frågan är dock om $stripped.lst bara är ett filnamn eller en fullständig sökväg? Som du har utformat din sed-kod så får inte $stripped.lst innehålla något / över huvud taget. Gör den det så blir det med största sannolikhet en massa fel.
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: Ta bort rad i textfil

Inlägg av rylleman »

$stripped.lst är bara filnamnet, inte någon sökväg.
$stripped är variabeln, .lst är filändelsen, är det där felet ligger? at jag försöker ta bort en variabel som inte finns, $stripped.lst istället för $stripped med filändelse?
Om jag vill ta bort hela raden där $stripped.lst finns istället för alla tecken på raden, vad ska jag använda då?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Ta bort rad i textfil

Inlägg av Konservburk »

rylleman skrev:$stripped.lst är bara filnamnet, inte någon sökväg.
Då antar jag att du befinner dig i rätt katalog när du kör sed-kommandot?
rylleman skrev:$stripped är variabeln, .lst är filändelsen, är det där felet ligger? at jag försöker ta bort en variabel som inte finns, $stripped.lst istället för $stripped med filändelse?
Nej, jag var nog lite otydlig där. Variabeln är bara $stripped, och inget mer. Om den innehåller t.ex. ordet varmkorv så kommer $stripped.lst att ersättas med varmkorv.lst
rylleman skrev:Om jag vill ta bort hela raden där $stripped.lst finns istället för alla tecken på raden, vad ska jag använda då?

Kod: Markera allt

sed "/$stripped.lst/d"
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: Ta bort rad i textfil

Inlägg av rylleman »

Tack, jag får det märkligt nog inte att funka även när jag använder din sista kod.

Så här ser hela kodstycket ut som skapar och modifierar textfilen;

Kod: Markera allt

cd $foldername
echo -e 'FPS 25\n' > $stripped.lst
ls >> $stripped.lst
#sed "s/$stripped.lst//" $stripped.lst  #--funkar inte!
sed "/$stripped.lst/d" #funkar inte heller...
Jag listar innehållet i mappet till textfilen men vill inte ha med själva textfilen så jag försöker ta bort den raden.
Textfilen skapas korrekt och filerna listas men jag får inte bort sista raden...
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Ta bort rad i textfil

Inlägg av Konservburk »

Då är det inte själva sed-koden som är problemet, utan mer hur du använder den. Du måste till att börja med på något sätt ange vilken fil sed ska jobba mot. Sedan måste du även tala om var resultatet ska hamna:

Kod: Markera allt

sed "/$stripped.lst/d" < "$stripped".lst > "$stripped".lst.restultat
Vill du skriva över orginalfilen så är tanken att du ska ersätta den med resultatet efteråt på egen hand:

Kod: Markera allt

mv -f "$stripped".lst.restultat "$stripped".lst
GNU sed kan göra det åt dig, men det fungerar inte med vilken version av sed som helst, så det är då inte säkert att du kan använda ditt skript överallt.

Kod: Markera allt

sed -i "/$stripped.lst/d" "$stripped".lst
rylleman skrev:Jag listar innehållet i mappet till textfilen men vill inte ha med själva textfilen så jag försöker ta bort den raden.
Då kan jag tipsa dig om att det är lättare och snyggare om du tar bort raden innan du sparar ner resultatet av ls till din fil:

Kod: Markera allt

ls | sed "/$stripped.lst/d" >> "$stripped".lst
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: Ta bort rad i textfil

Inlägg av rylleman »

Konservburk skrev: Då kan jag tipsa dig om att det är lättare och snyggare om du tar bort raden innan du sparar ner resultatet av ls till din fil:

Kod: Markera allt

ls | sed "/$stripped.lst/d" >> "$stripped".lst
Tack, det där gjorde precis vad jag ville.
Jag känner att jag borde sätta mig in mer i sed och andra kommandon men jag har inte riktigt tid så när jag behöver skapa något skript så blir det mest att googla efter liknande kod utan att jag kanske inte riktigt förstår vad jag gör...
Men jag får ju användbara skript i slutändan, även om vägen dit är lite knögglig.
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Ta bort rad i textfil

Inlägg av David Andersson »

rylleman skrev: #sed "s/$stripped.lst//" $stripped.lst #--funkar inte!
sed "/$stripped.lst/d" #funkar inte heller...[/code]
De funkar för mej (om jag tar bort # före första sed och lägger till filnamn $stripped.lst efter sista). Obs att resultatet inte sparas i en fil utan visas i terminalen. Därför kan man säga att det inte funkar i egentlig mening, men att Konservburks lösning gör det.

Tänk på: om stripped="massa" så kommer inte bara filen "massa.lst" att excluderas utan även "mandelmassa.lst" och liknande.
* FRA har redigerad detta meddelande *
rylleman
Inlägg: 477
Blev medlem: 23 apr 2007, 16:37
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: bagarmossen

Re: Ta bort rad i textfil

Inlägg av rylleman »

David Andersson skrev: Tänk på: om stripped="massa" så kommer inte bara filen "massa.lst" att excluderas utan även "mandelmassa.lst" och liknande.
Tack, men just det är inga problem eftersom skriptet skapar mappen och alla filer i den så allt som finns där är en png-sekvens och .lst-textfilen.
Skriv svar

Återgå till "Terminalforum"