Est-il possible de faire xargs
utiliser niquement newline comme séparateur? (en bash sous Linux et OS X si ça compte)
Je connais -0
peut être utilisé, mais c'est PITA car toutes les commandes ne prennent pas en charge les sorties délimitées par NUL.
Quelque chose dans le sens de
alias myxargs='Perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command
devrait marcher.
GNU xargs (par défaut sous Linux; installez findutils
depuis MacPorts sous OS X pour l'obtenir) prend en charge -d
qui vous permet de spécifier un délimiteur personnalisé pour la saisie, afin que vous puissiez faire
ls *foo | xargs -d '\n' -P4 foo
Avec Bash, je préfère généralement éviter les xargs pour tout ce qui est le moins délicat, en faveur des boucles en lecture. 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
comme caractère de fin de ligne.
Je devrais poster une question sur SO sur les avantages et les inconvénients des xargs par rapport aux boucles en lecture ... fait!
Qu'en est-il de cat file | xargs | sed 's/ /\n/ig'
ceci convertira les espaces en sauts de ligne, en utilisant les outils bash Linux standard.
Pas avec la version standard. J'ai une version piratée qui fait ça - je l'ai utilisée avant de connaître 'find ... -print0 | xargs -0 ...
'. Contactez-moi si vous voulez une copie - voir mon profil. (Pas de science de fusée - cependant, cela fait à peu près le travail. Ce n'est pas une réplique complète de xargs.)