区切り文字として改行のみをxargs
使用することは可能ですか?(LinuxおよびOS Xのbashでは、それが重要な場合)
-0
使用できることはわかっていますが、すべてのコマンドがNUL区切りの出力をサポートしているわけではないため、PITAです。
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
と比較して入力するのが多すぎるls *.foo | xargs -P4
。
区切り文字として改行のみをxargs
使用することは可能ですか?(LinuxおよびOS Xのbashでは、それが重要な場合)
-0
使用できることはわかっていますが、すべてのコマンドがNUL区切りの出力をサポートしているわけではないため、PITAです。
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
と比較して入力するのが多すぎるls *.foo | xargs -P4
。
回答:
GNU xargs(Linuxのデフォルト、findutils
OS XのMacPortsからインストールして取得)をサポートし-d
ているため、入力用のカスタム区切り文字を指定できるため、
ls *foo | xargs -d '\n' -P4 foo
alias xxargs="xargs -d '\n'"
bashrcにいます。:私はちょうどこのようなものを行うことができるようにgrep -IRl foo | xxargs sed -i s/foo/bar/g
tr
あまりにも良いアイデアです。
brew install findutils
そしてgxargs
私は、OS X上のおかげでまさに必要でした。
Bashを使用する場合、一般的には、ちょっとしたトリッキーなものについてはxargsを避け、while-readループを優先します。あなたの質問のためにwhile read -ar LINE; do ...; done
、仕事をします(たとえば、${LINE[@]}
行全体で配列構文をLINEで使用することを忘れないでください)。これはトリックを必要としません。デフォルトでは、readはちょうど\n
行末文字として使用します。
読みながら、私はループをxargsの対の長所と短所についてのSOに質問を投稿する必要があります... やりました!
xargs -n1 -d'\n'
、全体ではありませんxargs
。
xargs -n$N
、追加のスクリプトを少し追加するだけで同様にシミュレートできます。
read
別の変数でより多くの単語を読む、またはで区切り文字を変更するなどのオプションを使用できますIFS=' '
。
標準バージョンではありません。私はそれを行うハッキングされたバージョンを持っています-' find ... -print0 | xargs -0 ...
' を知る前にそれを使用しました。コピーが必要な場合は私に連絡してください-私のプロフィールをご覧ください。(ロケット科学はありません-それは仕事をしますが、完全なxargsレプリカではありません。)
これについてcat file | xargs | sed 's/ /\n/ig'
は、標準のLinux bashツールを使用して、スペースを改行に変換します。
file
、スペースや改行が含まれている場合、このコマンドの結果はこの質問を求めてきたのと反対方向に向かっているように思われ、それは不可能それらを区別するようになります