1. Dateien auflisten + ändern # 1
    mkeil

    Dateien auflisten + ändern

    Hi,

    ich habe ca. 1300 Dateien die ich durchsuchen und bei positiven Ergebnis den Inhalt verändern will. Ich zeige Euch erstmal den Code:

    Code:
    #!/bin/bash
    #
    #
    #
    for f in *
    do
    	lang=`grep %begin $f | awk '{print $2}' | sed s/%// | tr -d " "`
    	echo "$f - $lang" >> outl.txt
    	case "$lang" in
    		"cpp" | "c++" ) 
    			#echo "c++ syntax --- $f --- $lang"
    			echo "sed -i 's/%begin $lang%/%CODE{ lang="Cpp" }%/g;s/%end%/%ENDCODE%/g' $f"
    			;;
    		
    		"java" )
    			#echo "java syntax --- $f --- $lang"
    			echo "sed -i 's/%begin $lang%/%CODE{ lang="Java" }%/g;s/%end%/%ENDCODE%/g' $f"
    			;;
    	esac
    done

    Ich lasse das Ergebnis ja auch noch in eine Testdatei schreiben, die sieht dann wie folgt aus wenn das gesuchte Wort öfter vorkommt:

    Blabla.txt - cpp
    cpp
    cpp

    Und dann haut das ganze mit dem case natürlich nicht hin, da er ja garnicht weiß um welche Datei es geht. Das Problem ist, dass er "Dateien" verschluckt in dennen das Wort _öfter_ vorkommt wenn ich nur die Datei und die Sprache ausgeben will. Er springt also garnicht in das Case. Ich schätze es liegt an der for-schleife. Gibts da eine ordentliche Lösung für?

    Gruß
    Marcel

  2. Dateien auflisten + ändern # 2
    TheBonsai
    An der for-Schleife? Soweit ich das sehen kann, liegt Dein Problem darin, dass $lang mehrere Zeilen enthält - also dass das grep das ''%begin'' mehrmals findet.

    Setz doch mal zwischen dem grep und dem awk ein
    Code:
    ... | sed '1!d' | ...
    J.

  3. Dateien auflisten + ändern # 3
    mkeil
    Danke, das geht! Kannst Du mir bitte noch erklären was das sed genau macht?

  4. Dateien auflisten + ändern # 4
    TheBonsai
    Es löscht alles im Datenstrom, ausser die erste Zeile (ja, head geht da auch, aber ich finde es albern, sed ist da viel flexibler).

    Basissyntax für sed:
    Code:
    [ADRESSE][!][KOMMANDO]
    ADRESSE wäre hier "Zeile 1", das "alle ausser" (eine Art logisches NOT) Zeichen ("!") ist gegeben, das Kommando ist (d)elete.

    --> 1!d: Lösche alle Zeilen, ausser die erste.

    J.

+ Antworten

Ähnliche Themen zu Dateien auflisten + ändern

  1. Cam für C-Tech: Hallöchen an alle. Diabolo oder T-REX ?? ...
    Von allket100 im Forum Clarke Tech 1500/ 2000/ 2100
    Antworten: 21
    Letzter Beitrag: 13.11.2006, 21:29

Lesezeichen

Lesezeichen
Sie betrachten gerade Dateien auflisten + ändern.