it-swarm.com.de

Newline-getrennte Xargs

Ist es möglich, xargs dazu zu bringen, nur Zeilenumbruch als Trennzeichen zu verwenden? (in Bash unter Linux und OS X, wenn das wichtig ist)

Ich kenne -0 kann verwendet werden, aber es ist PITA, da nicht jeder Befehl eine durch NUL getrennte Ausgabe unterstützt.

44
Kornel

Etwas in der Art von

alias myxargs='Perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command

sollte arbeiten.

19
hurfdurf

GNU xargs (Standard unter Linux; findutils von MacPorts unter OS X installieren, um es zu erhalten) unterstützt -d, mit dem Sie ein benutzerdefiniertes Trennzeichen angeben können für die Eingabe, damit Sie dies tun können

ls *foo | xargs -d '\n' -P4 foo 
58
James

Bei Bash ziehe ich es im Allgemeinen vor, Xargs für alles zu vermeiden, was am wenigsten schwierig ist, und zwar zugunsten von Leseschleifen. Für Ihre Frage while read -ar LINE; do ...; done erledigt den Job (denken Sie daran, die Array-Syntax mit LINE zu verwenden, z. B. ${LINE[@]} für die ganze Zeile). Dies erfordert keine Trickserei: Standardmäßig verwendet read nur \n als Zeilenabschlusszeichen.

Ich sollte eine Frage zu SO über die Vor- und Nachteile von xargs vs. while-read-Schleifen ... fertig! posten

5
Charles Stewart

Wie wäre es mit cat file | xargs | sed 's/ /\n/ig' Dadurch werden Leerzeichen mit Standard-Linux-Bash-Tools in Zeilenumbrüche konvertiert.

0
Omar Al-Ithawi

Nicht mit der Standardversion. Ich habe eine gehackte Version, die das macht - ich habe sie benutzt, bevor ich von 'find ... -print0 | xargs -0 ... '. Kontaktieren Sie mich, wenn Sie eine Kopie wünschen - siehe mein Profil. (Keine Raketenwissenschaft - es macht jedoch fast den Job. Es ist keine vollständige Xargs-Nachbildung.)

0