PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SED-Frage, Leerzeichen und "/" im Ersetzstring



W2K2011
02.08.12, 20:19
Hallo,

ich habe eine Frage zu SED und hoffe hier etwas Hilfe zu finden.

Ich möchte einen String (PLTLIST), in dem Leerzeichen und auch "/" vorkommen, in eine Datei an einer bestimmten Stelle "ein"setzen. Diese Stelle ist mit dem Begriff "LIST_OF_FILENAMES" markiert.

Folgendes habe ich versucht:
PLTLIST="find . -name *.dat"
sedstring="s/LIFT_OF_FILENAMES/'${PLTLIST////\\/}'/g"
echo $sedstring
sed -e ${sedstring} Datei.1 > Datei.2

In dem String $PLTLIST befinden sich mehrere Dateinamen, die durch Leerzeichen getrennt sind. Wie bekomme ich das hin?

Efraim
02.08.12, 20:36
Ungetestet:

sed -e "s|LIST_OF_FILENAMES|$( find . -name *.dat )|" Datei.1 > Datei.2

W2K2011
02.08.12, 20:52
sed -e "s|LIST_OF_FILENAMES|$( ls *.txt )|" GetAverages.1 > GetAverages.2


Liefert immer die Fehlermeldung: "sed: -e expression #1, char 36: unterminated `s' command"

W2K2011
02.08.12, 20:56
Ich habe ls *.txt genommen, da es einfacher ist. Das Ergebnis lautet:

FilenameList.txt Filename.txt Text1.txt Text2.txt Text3.txt

Efraim
02.08.12, 21:18
Probiere es mal ohne Zeilenvorschübe:

sed -e "s|LIST_OF_FILENAMES|$( echo $( ls *.txt ) )|" GetAverages.1 > GetAverages.2

W2K2011
02.08.12, 21:36
Ne, das funktioniert irgendwie auch nicht richtig... ?!?!?! Wenn ich das ausführe, dann passiert teilweise gar nichts. Habe das aber noch nicht richtig verstanden...

W2K2011
02.08.12, 21:39
OK, doch es geht jetzt. Danke!

buzz768
02.08.12, 21:46
Mir ist grad mal was Unorthodoxes eingefallen, allerdings scheinst du ja alle Dateien (mit Leerzeichen und getrennt durch Leerzeichen ??) in einer Zeile einfügen zu wollen..


find . -name "*.txt" | sed -e "/LIST_OF_FILENAMES/d;n;r/dev/stdin" GetAverages.1 > GetAverages.2


PS
achso " Dateinamen, die durch Leerzeichen getrennt sind" ergeben einen "einen String (PLTLIST), in dem Leerzeichen ... vorkommen", also keine Leerzeichen in Dateinamen.

Efraim
02.08.12, 22:28
Mir ist auch noch was eingefallen: Das ls ist im gezeigten Fall völlig überflüssig. Dieser Code reicht aus (in der Bash jedenfalls):

sed "s|LIST_OF_FILENAMES|$( echo *.txt )|" GetAverages.1 > GetAverages.2