Ich möchte einen Bash-Befehl finden, mit dem ich jede Datei in einem Verzeichnis durchsuchen und die Ausgabe dieses Greps in eine separate Datei schreiben kann. Meine Vermutung wäre gewesen, so etwas zu tun
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
aber soweit ich weiß, mag xargs die doppelten Anführungszeichen nicht. Wenn ich jedoch die doppelten Anführungszeichen entferne, leitet der Befehl die Ausgabe des gesamten Befehls in eine einzelne Datei mit dem Namen '{}'. Out anstatt in eine Reihe einzelner Dateien um.
Kennt jemand eine Möglichkeit, dies mit xargs zu tun? Ich habe dieses grep-Szenario nur als Beispiel verwendet, um mein Problem mit xargs zu veranschaulichen, sodass Lösungen, die xargs nicht verwenden, für mich nicht so zutreffend sind.
xargs
ohne verwenden-0
: Dies gilt nur, wenn Siefind
die Ausgabe mitxargs
, oder? Wenn ich es tue,xargs -a <input_file>
wie würde ich das verwenden? Die meisten Befehle mögengrep
Ausgaben mit\n
und nicht.\0.
Die einzige Möglichkeit, diestr
zu umgehen, besteht darin, sie erneut zu verwenden, um dies möglicherweise zu beheben. Aber warum ist es wichtig, es nur mit zu verwenden-0
?-0
,xargs
nehmen Sie Ihre Dateinamen und brechen alle Leerzeichen, Anführungszeichen und Backslashes in ihnen. Sie solltenxargs
als Werkzeug einfach vergessen . Wenn Sie Zeilen haben, verwenden Sie eine Bash-Schleife, um die Zeilen zu iterieren:while read line; do <command> "$REPLY"; done < file-with-lines
odercommand | while ...
xargs
GNUs sind)xargs
muss dies vermieden werden, es sei denn, man kann es mit verwenden-0
. Danke dir.xargs
, bei der es nicht immer um das Parsenls
oder Verwenden gehtsh -c
. Dies beantwortet die Frage nicht im geringsten, sondern ist das erste Google-Ergebnis für die Frage, das nur zur Verwirrung beiträgt.xargs -I{} sh -c 'grep ABC "$1" > "$1.out"' -- {}
? Insbesondere die Regeln für eingebettete (doppelte) Anführungszeichen und das "-" Symbol am Ende. Vielen DankEine Lösung ohne
xargs
ist die folgende:... und das gleiche kann gemacht werden
xargs
, es stellt sich heraus:Bearbeiten : einfache Anführungszeichen nach Bemerkung von lhunath hinzugefügt .
quelle
Ich gehe davon aus, dass Ihr Beispiel nur ein Beispiel ist und dass Sie es möglicherweise für andere Dinge benötigen. GNU Parallel http://www.gnu.org/software/parallel/ kann Ihre Rettung sein. Es ist kein zusätzliches Anführungszeichen erforderlich, solange Ihre Dateinamen nicht \ n enthalten:
Wenn Sie Dateinamen mit \ n haben:
Als zusätzlichen Bonus erhalten Sie die Jobs parallel ausgeführt.
Sehen Sie sich die Intro-Videos an, um mehr zu erfahren: http://pi.dk/1
Bei der 10-Sekunden-Installation wird versucht, eine vollständige Installation durchzuführen. Wenn dies fehlschlägt, eine persönliche Installation. Wenn dies fehlschlägt, eine minimale Installation:
Wenn Sie es auf einen Server verschieben müssen, auf dem GNU Parallel nicht installiert ist, versuchen Sie es
parallel --embed
.quelle