Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Hitta en okänd sträng

Det står still i skallen på mig så jag slänger ut en förfrågan här om det finns nån scriptkung som kan svara.....

Jag har en fil som innehåller bl.a. följande:

#ok echo "$searchedString: wantedString"
printf "--------------------------------"
printf ", $searchedString: wantedString , " | bla bla bla | bla bla bla
echo " "
#ok printf ", $searchedString: wantedString," bla bla bla
#notok printf ', $searchedString: wantedString,' bla bla bla
#testing not ok printf ", $searchedString: wantedString, " bla bla bla
#not ok write over timestamp printf ", $searchedString: wantedString," bla bla bla

Jag vill hitta värdet på wantedString. Endast.

Filen ovan är en av de få där $searchedString och wantedString förekommer flera gånger i filen av en massa likartade andra filer. I de andra förekommer det bara en gång.

I de andra filerna maskar jag ut wantedString eftersom det bara förekommer EN gång.

          TMP_VAR=`/usr/bin/cat FILNAMN | grep $searchedString` # Find row with string
          TMP_VAR2=`echo ${TMP_VAR##printf" \", "$searchedString: } ` # Remove entries in the beginning of the string variable TMP_VAR
          WANTEDSTRING=`echo ${TMP_VAR2//" ",\" | bla bla bla | bla bla bla}` # Remove entries in the end of the string variable TMP_VAR2

Men hur gör jag för att komma åt wantedString en gång i ovanstående fil-exempel? Helst vill jag ju komma åt den, troligen enda, rad där printf med $searchedString och wantedString INTE är bortkommenterat....

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

nisses bild

som svar på min egen fråga lyckades jag lösa problemet med sed.

TMP_VAR=`/usr/bin/cat FILNAMN | grep $searchedString | <strong>sed -e '/^#.*/d'</strong>` # Find row with string
TMP_VAR2=`echo ${TMP_VAR##printf" \", "$searchedString: } ` # Remove entries in the beginning of the string variable TMP_VAR
WANTEDSTRING=`echo ${TMP_VAR2//" ",\" | bla bla bla | bla bla bla}` # Remove entries in the end of the string variable TMP_VAR2

fredentofts bild

Du kan säkert spara en del tid (beroende på filernas storlek såklart) genom att använda grep direkt, istället för cat | grep.
grep $searchedString FILNAMN
 
Argumentera aldrig med idioter.
De drar bara ner dig till sin nivå och vinner på erfarenhet!

-
För övrigt anser jag att trådindenteringen måste lagas
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-