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 LTS
GNU parallel 20130522
GNU sed version 4.2.1
zsh 4.3.17
quelle