Qu'est-ce que vous essayez d'accomplir? Il y a peut-être une autre façon de s'y prendre.
pause jusqu'à nouvel ordre.
@ Dennis Je l'utilise pour diverses choses, souvent en pipeline avec grep, sed, awk très basique, etc., principalement pour paralléliser l'exécution. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4est trop difficile à taper par rapport à ls *.foo | xargs -P4.
Kornel
Les scripts et les fonctions sont deux excellents moyens de réduire la dactylographie.
perl est excessif pour un seul personnage. trest plus rapide à la fois pour le processeur et pour vos doigts.
Hello World le
54
GNU xargs (valeur par défaut sous Linux; installation à findutilspartir de MacPorts sous OS X pour l’obtenir) prend en charge le support, -dce qui vous permet de spécifier un délimiteur personnalisé pour l’entrée, de sorte que vous puissiez le faire.
J'ai alias xxargs="xargs -d '\n'"dans mon bashrc. Donc, je peux juste faire des choses comme ça:grep -IRl foo | xxargs sed -i s/foo/bar/g
tylerl
4
Cela devrait vraiment être la réponse acceptée. Pas besoin de sortir perl. Bien que ce trsoit une bonne idée aussi.
Ehtesh Choudhury
3
brew install findutilset gxargsétait exactement ce dont j'avais besoin sur OS X, merci.
Brad Koch
5
Avec Bash, je préfère généralement éviter xargs pour tout ce qui est le moins compliqué, en faveur des boucles while-read. Pour votre question, while read -ar LINE; do ...; donefait le travail (n'oubliez pas d'utiliser la syntaxe de tableau avec LINE, par exemple, ${LINE[@]}pour toute la ligne). Cela ne nécessite aucune astuce: par défaut, read utilise simplement \nle caractère de fin de ligne.
Je devrais poser une question sur SO sur les avantages et les inconvénients de xargs par rapport aux boucles en lecture ... fait!
Cela ne peut qu'imiter xargs -n1 -d'\n', et non le tout xargs.
Hello World le
@ HelloWorld - Vous pouvez regrouper les arguments assez facilement, de sorte que vous pouvez également simuler xargs -n$Navec seulement un peu de script supplémentaire.
Charles Stewart
Oui, je suis parmi les votants, c'est juste une remarque qui mérite d'être mentionnée.
Bonjour le monde
C'est exactement ce que je fais! De plus, vous pouvez utiliser les readoptions, comme lire plus de mots dans des variables séparées ou modifier le délimiteur avec IFS=' '.
Caesarsol
0
Pas avec la version standard. J'ai une version piratée qui fait ça - je l'ai utilisée avant que je sache ' find ... -print0 | xargs -0 ...'. Contactez-moi si vous voulez une copie - voir mon profil. (Aucune science de fusée - il fait à peu près tout le travail, cependant. Ce n'est pas une réplique complète de xargs.)
Si filecontient des espaces et des lignes, le résultat de cette commande rendra impossible la distinction entre eux, ce qui semble aller dans le sens opposé à ce que cette question demande.
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
est trop difficile à taper par rapport àls *.foo | xargs -P4
.Réponses:
Quelque chose dans le sens de
devrait marcher.
la source
tr '\n' '\0'
fonctionne aussi.tr
est plus rapide à la fois pour le processeur et pour vos doigts.GNU xargs (valeur par défaut sous Linux; installation à
findutils
partir de MacPorts sous OS X pour l’obtenir) prend en charge le support,-d
ce qui vous permet de spécifier un délimiteur personnalisé pour l’entrée, de sorte que vous puissiez le faire.la source
alias xxargs="xargs -d '\n'"
dans mon bashrc. Donc, je peux juste faire des choses comme ça:grep -IRl foo | xxargs sed -i s/foo/bar/g
tr
soit une bonne idée aussi.brew install findutils
etgxargs
était exactement ce dont j'avais besoin sur OS X, merci.Avec Bash, je préfère généralement éviter xargs pour tout ce qui est le moins compliqué, en faveur des boucles while-read. Pour votre question,
while read -ar LINE; do ...; done
fait le travail (n'oubliez pas d'utiliser la syntaxe de tableau avec LINE, par exemple,${LINE[@]}
pour toute la ligne). Cela ne nécessite aucune astuce: par défaut, read utilise simplement\n
le caractère de fin de ligne.Je devrais poser une question sur SO sur les avantages et les inconvénients de xargs par rapport aux boucles en lecture ... fait!
la source
xargs -n1 -d'\n'
, et non le toutxargs
.xargs -n$N
avec seulement un peu de script supplémentaire.read
options, comme lire plus de mots dans des variables séparées ou modifier le délimiteur avecIFS=' '
.Pas avec la version standard. J'ai une version piratée qui fait ça - je l'ai utilisée avant que je sache '
find ... -print0 | xargs -0 ...
'. Contactez-moi si vous voulez une copie - voir mon profil. (Aucune science de fusée - il fait à peu près tout le travail, cependant. Ce n'est pas une réplique complète de xargs.)la source
Pourquoi
cat file | xargs | sed 's/ /\n/ig'
ne pas convertir les espaces en nouvelles lignes à l’aide des outils bash Linux classiques?la source
file
contient des espaces et des lignes, le résultat de cette commande rendra impossible la distinction entre eux, ce qui semble aller dans le sens opposé à ce que cette question demande.