Ich benutze die zsh Schale. Ich versuche es zu benutzen sed um Text in vielen Dateien zu ersetzen, verwenden Sie parallel, um den Prozess zu beschleunigen. Wenn ich dies an einer Datei getestet habe und die Befehlsausgabe zu gehen lasse stdout Ich habe das erwartete Ergebnis gesehen. Als ich versuchte, diese Ausgabe in eine Datei umzuleiten, bekam ich eine leere Datei. Was ist los? Hier ist ein triviales Beispiel, bei dem eine einzelne Datendatei zum Ausschneiden und Einfügen verwendet wird.
setopt interactivecomments
# In this trivial example it is obviously non-sensical
# to use parallel, but in reality I have many files...
# Some very simple input data...
paste <(printf "%s\n" `seq 1 4`) <(printf "%s\n" `seq 1 4`) > ./input.txt
# This looks like:
#1 1
#2 2
#3 3
#4 4
# Pass data file to parallel and use sed to substitute.
# e.g. want to replace line '3 3' with '3 33'
# Output goes to stdout & seems correct...
z=`find ./input.txt`
echo "$z" | parallel 'sed "s/\(^3.*3\)/\13/"'
#1 1
#2 2
#3 33 ===> correct replacement
#4 4
# But redirecting to a file leads to empty file...
echo "$z" | parallel 'sed "s/\(^3.*3\)/\13/" > {//}/result.txt'
# Empty file
cat ./result.txt
Was gibt? Muss ich etwas falsch angeben?
Ich benutze:
Ubuntu 12.04.4 LTSGNU parallel 20130522GNU sed version 4.2.1zsh 4.3.17