Frage von UrinStone, 31

Womit kann ich viele Textdatein auf einmal editieren?

Hay, Ich muss gerade ca in 1000 .acc Dateien gucken um ein wert zu verändern ^^. Jetzt wollt ich fragen ob es ein Programm, dass von selbst in jede Datei guckt und diesen Wert auf einer bestimmten Zeile ändern kann. In Prinzip soll in der 3. Zeile jeder Datei 0 stehen was nicht immer der Fall ist ^^.

MfG. UrinStone

Antwort
von GWBln, 3

Du schreibst nichts über das benutzte Betriebs-System!

Unter der Annahme irgendeine Linux-Distribution:

Quasi Standard-Programm für solche Aufgaben ist „sed“ (Stream EDitor), siehe https://de.wikipedia.org/wiki/Sed_(Unix).

Ich habe das u.a. mal auch in der lokalen Zeichketten-Verarbeitung eingesetzt:

AktDate=$(date +%d.%m.%Y)
FD=$(ls -lLtc --time-style=+%d.%m.%Y "$FN" |awk '{print $6}')
if [ "$FD" = "$AktDate" ]; then
echo -e "\tbereits geändert\n"
else
echo -e "\taktualisiere Datei '$FN':\n"
New=/tmp/UpdateBearbeitet$$
cat "$FN" |sed "s/bearbeitet ........../bearbeitet $AktDate/g" >$New
/bin/cp -pv $New "$FN"
/bin/rm $New
fi

Hier wird eine Datei (Name in lokaler Variablen FD) nachgesehen, ob sie eine Zeichenkette mit "bearbeitet tt.mm.jahr" enthält. Wenn das Veränderungsdatum der Datei (Variable FD) vom aktuellen Datum abweicht, wird der Text in der Datei auf das aktuelle Datum gesetzt.

Anwendbar auf beliebige Text-Dateien (also auch HTML)!

Ein oder mehrere Worte in bestimmten Dateien durch andere ersetzen: suchen

von='vontext'; nach='nachtext'; filetype='*.html'; OLDIFS=$IFS;
IFS='
' ; files=`find . -maxdepth 1 -type f -name "$filetype"`;
for f in $files;do cp $f $f.bak; g="$f.mettytmp"; echo "Searching in $f ..."; cat "$f" | sed "s/$von/$nach/" > "$g" && mv "$g" "$f"; rm -f *.mettytmp; done;
IFS=$OLDIFS;

Der Befehl sucht, so wie er oben steht, nur im aktuellen Verzeichnis,

da -maxdepth 1 angegeben wurde.

Falls er rekursiv in allen Verzeichnissen suchen soll, dann lässt mal den Text

einfach weg und wenn man nur bis zu einer bestimmten Tiefe in die Verzeichnisse hinabsteigen will, dann wählt man statt 1 eine andere Zahl.

(Hinweis: der Zeilenumbruch bei IFS=' ist absolut wichtig, den darf man beim

Kopieren aus dem Browserfenster hinaus nicht vergessen!

siehe auch www.einzeiler.de

Viel Spaß für die, welche eine solche Aufgabe mit Windows durchführen wollen ... geht ev. mit Visual-Basic ... aber das muß man erst einmal haben!

Antwort
von idontknowwhaty, 19

http://stackoverflow.com/questions/13806355/add-text-after-every-line-multiple-e...

in der suchfunktion von notepad++ (welche du auf beliebig viele Dateien ansetzen kannst) kannst du mit regex das machen was du willst.

Keine passende Antwort gefunden?

Fragen Sie die Community