Ist es möglich zu machen , xargs
Verwendung nur Newline als Trennzeichen ? (in Bash auf Linux und OS X, wenn das wichtig ist)
Ich weiß, -0
dass es verwendet werden kann, aber es ist PITA, da nicht jeder Befehl eine durch NUL getrennte Ausgabe unterstützt.
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
ist viel zu viel zu schreiben im Vergleich zuls *.foo | xargs -P4
.Antworten:
Etwas in der Art von
sollte arbeiten.
quelle
tr '\n' '\0'
funktioniert auch.tr
ist schneller sowohl für die CPU als auch für Ihre Finger.GNU xargs (Standard unter Linux; Installation
findutils
von MacPorts unter OS X, um es zu erhalten) unterstützt, mit-d
dem Sie ein benutzerdefiniertes Trennzeichen für die Eingabe festlegen könnenquelle
alias xxargs="xargs -d '\n'"
in meinem bashrc. Also kann ich einfach so etwas machen:grep -IRl foo | xxargs sed -i s/foo/bar/g
tr
aber auch eine gute Idee.brew install findutils
undgxargs
war genau das, was ich unter OS X brauchte, danke.Bei Bash ziehe ich es im Allgemeinen vor, xargs für alles zu vermeiden, was am wenigsten schwierig ist, und zwar zugunsten von Leseschleifen. Erledigt bei Ihrer Frage
while read -ar LINE; do ...; done
die Aufgabe (denken Sie daran, Array-Syntax mit LINE zu verwenden, z. B.${LINE[@]}
für die gesamte Zeile). Dies erfordert keinen Trick: Standardmäßig wird beim Lesen nur\n
das Zeilenendezeichen verwendet.Ich sollte auf SO eine Frage zu den Vor- und Nachteilen von xargs vs. while-read-Schleifen stellen ... fertig!
quelle
xargs -n1 -d'\n'
und nicht das Ganzexargs
.xargs -n$N
auch mit ein wenig zusätzlichem Skripting zu simulieren .read
Optionen verwenden, z. B. mehrere Wörter in separaten Variablen lesen oder das Trennzeichen mit ändernIFS=' '
.Nicht bei der Standardversion. Ich habe eine gehackte Version, die das macht - ich habe sie benutzt, bevor ich von '
find ... -print0 | xargs -0 ...
' wusste . Kontaktieren Sie mich, wenn Sie eine Kopie möchten - siehe mein Profil. (Keine Raketenwissenschaft - es erledigt den Job aber fast. Es ist keine vollständige Xargs-Replik.)quelle
Wie
cat file | xargs | sed 's/ /\n/ig'
sieht es damit aus, wenn Leerzeichen mit Standard-Linux-Bash-Tools in Zeilenumbrüche umgewandelt werden?quelle
file
Leerzeichen und Zeilenumbrüche enthalten sind, wird das Ergebnis dieses Befehls eine Unterscheidung unmöglich machen. Dies scheint in die entgegengesetzte Richtung zu gehen, wie in dieser Frage