Apa yang ingin Anda capai. Mungkin ada cara lain untuk melakukannya.
Dijeda sampai pemberitahuan lebih lanjut.
@ Dennis Saya menggunakannya untuk berbagai hal, sering dalam pipa dengan grep, sed, awk dll, sebagian besar untuk memparalelkan eksekusi. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4terlalu banyak untuk diketik dibandingkan dengan ls *.foo | xargs -P4.
Kornel
Script dan fungsi adalah dua cara terbaik untuk mengurangi pengetikan.
Saya miliki alias xxargs="xargs -d '\n'"di bashrc saya. Jadi saya bisa melakukan hal-hal seperti ini:grep -IRl foo | xxargs sed -i s/foo/bar/g
tylerl
4
Ini benar-benar harus menjadi jawaban yang diterima. Tidak perlu keluar perl. Padahal tritu ide yang bagus juga.
Ehtesh Choudhury
3
brew install findutilsdan gxargspersis apa yang saya butuhkan di OS X, terima kasih.
Brad Koch
5
Dengan Bash, saya biasanya lebih suka menghindari xargs untuk apa pun yang paling sulit, demi loop sambil membaca. Untuk pertanyaan Anda, while read -ar LINE; do ...; doneapakah pekerjaan (ingat untuk menggunakan sintaks array dengan LINE, misalnya, ${LINE[@]}untuk seluruh baris). Ini tidak memerlukan tipuan: secara default penggunaan baca hanya \nsebagai karakter terminator garis.
Saya harus memposting pertanyaan di SO tentang pro & kontra dari loop xargs sambil membaca ... selesai!
Ini hanya bisa ditiru xargs -n1 -d'\n', dan tidak keseluruhan xargs.
Hello World
@ HaloWorld - Anda dapat mengelompokkan argumen dengan cukup mudah, sehingga Anda dapat mensimulasikan xargs -n$Njuga dengan hanya sedikit skrip tambahan.
Charles Stewart
Ya, saya termasuk di antara para upvoters, hanya komentar yang layak disebut.
Hello World
Inilah yang saya lakukan! Plus, Anda dapat menggunakan readopsi, seperti membaca lebih banyak kata dalam variabel terpisah, atau mengubah pembatas dengan IFS=' '.
caesarsol
0
Tidak dengan versi standar. Saya memiliki versi yang diretas yang melakukan itu - saya menggunakannya sebelum saya tahu tentang ' find ... -print0 | xargs -0 ...'. Hubungi saya jika Anda ingin salinannya - lihat profil saya. (Tidak ada ilmu roket - hanya tentang melakukan pekerjaan, meskipun. Ini bukan replika xargs lengkap.)
Jika fileberisi spasi dan baris baru, maka hasil dari perintah ini akan membuat tidak mungkin untuk membedakan di antara mereka, yang tampaknya berjalan berlawanan arah dengan apa yang ditanyakan oleh pertanyaan ini
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
terlalu banyak untuk diketik dibandingkan denganls *.foo | xargs -P4
.Jawaban:
Sesuatu di sepanjang garis
harus bekerja.
sumber
tr '\n' '\0'
bekerja juga.tr
lebih cepat untuk cpu dan untuk jari Anda.GNU xargs (default di Linux; instal
findutils
dari MacPorts di OS X untuk mendapatkannya) mendukung-d
yang memungkinkan Anda menentukan pembatas khusus untuk input, sehingga Anda dapat melakukansumber
alias xxargs="xargs -d '\n'"
di bashrc saya. Jadi saya bisa melakukan hal-hal seperti ini:grep -IRl foo | xxargs sed -i s/foo/bar/g
tr
itu ide yang bagus juga.brew install findutils
dangxargs
persis apa yang saya butuhkan di OS X, terima kasih.Dengan Bash, saya biasanya lebih suka menghindari xargs untuk apa pun yang paling sulit, demi loop sambil membaca. Untuk pertanyaan Anda,
while read -ar LINE; do ...; done
apakah pekerjaan (ingat untuk menggunakan sintaks array dengan LINE, misalnya,${LINE[@]}
untuk seluruh baris). Ini tidak memerlukan tipuan: secara default penggunaan baca hanya\n
sebagai karakter terminator garis.Saya harus memposting pertanyaan di SO tentang pro & kontra dari loop xargs sambil membaca ... selesai!
sumber
xargs -n1 -d'\n'
, dan tidak keseluruhanxargs
.xargs -n$N
juga dengan hanya sedikit skrip tambahan.read
opsi, seperti membaca lebih banyak kata dalam variabel terpisah, atau mengubah pembatas denganIFS=' '
.Tidak dengan versi standar. Saya memiliki versi yang diretas yang melakukan itu - saya menggunakannya sebelum saya tahu tentang '
find ... -print0 | xargs -0 ...
'. Hubungi saya jika Anda ingin salinannya - lihat profil saya. (Tidak ada ilmu roket - hanya tentang melakukan pekerjaan, meskipun. Ini bukan replika xargs lengkap.)sumber
Bagaimana dengan
cat file | xargs | sed 's/ /\n/ig'
ini akan mengkonversi spasi menjadi baris baru, menggunakan alat bash Linux standar.sumber
file
berisi spasi dan baris baru, maka hasil dari perintah ini akan membuat tidak mungkin untuk membedakan di antara mereka, yang tampaknya berjalan berlawanan arah dengan apa yang ditanyakan oleh pertanyaan ini