Newline ayrılmış Xargs


40

Ayırıcı olarak sadece newline xargskullanmak mümkün mü ? (eğer önemliyse Linux ve OS X'te kısaca)

-0Kullanılabileceğini biliyorum , ancak her komut NUL ile ayrılmış çıktıları desteklemediği için PITA.


Ne yapmaya çalışıyorsun? Bunu yapmanın başka bir yolu olabilir.
Dennis Williamson,

@Dennis Genellikle grep, sed, very basic awk vb. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4ile karşılaştırıldığında yazmak için çok fazla yol ls *.foo | xargs -P4.
Kornel

Komut dosyaları ve işlevler, yazmayı azaltmanın iki mükemmel yoludur.
Dennis Williamson

Bu bir SO sorusu, değil mi?
Charles Stewart,

Yanıtlar:


17

Çizgileri boyunca bir şey

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

çalışmalı.


38
tr '\n' '\0'de çalışır.
Kornel

2
perl, tek bir karakter için fazladır. trhem işlemci hem de parmaklarınız için daha hızlı.
Merhaba Dünya

52

GNU xargs (Linux'ta varsayılan; findutilsOSP'de MacPorts'dan yüklemek için onu almak için yükleyin ) giriş için -dözel bir sınırlayıcı belirlemenizi sağlar;

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

Ben alias xxargs="xargs -d '\n'"benim bashrc içinde. Böylece sadece şöyle şeyler yapabilirim:grep -IRl foo | xxargs sed -i s/foo/bar/g
tylerl

4
Bu gerçekten kabul edilen cevap olmalı. Perl'i parçalamaya gerek yok. Yine trde iyi bir fikir.
Ehtesh Choudhury

3
brew install findutilsve gxargstam olarak OS X'te ihtiyacım olan şeydi, teşekkürler.
Brad Koch

5

Bash ile genellikle okuma sırasında döngüler lehine, en ufak bir şey için xarglardan kaçınmayı tercih ederim. Sorunuz while read -ar LINE; do ...; doneiçin iş var (örneğin ${LINE[@]}tüm satır için LINE ile dizi sözdizimini kullanmayı unutmayın ). Bunun herhangi bir numaraya ihtiyacı yok: varsayılan olarak okuma \n, satır sonlandırıcı karakteri olarak kullanılır.

SO hakkında Xarg'ların artıları ve eksileri hakkında okuma-okuma döngülerine ilişkin bir soru sormalıyım ... bitti!


2
Bu sadece xargs -n1 -d'\n'bütünleştirici değil taklit edebilir xargs.
Merhaba Dünya

@HelloWorld - Argümanları yeterince kolay bir şekilde bir araya getirebilirsiniz, böylece xargs -n$Nsadece bir miktar ekstra komut dosyası ile de simülasyon yapabilirsiniz .
Charles Stewart

Evet, elçilerin arasındayım, bu sadece bahsetmeye değer bir not.
Merhaba Dünya

Bu tam olarak ne yapıyorum! Ayrıca, readayrı değişkenlerde daha fazla kelime okumak veya ile sınırlayıcıyı değiştirmek gibi seçenekleri kullanabilirsiniz IFS=' '.
caesarsol

0

Standart versiyonda değil. Bunu yapan hacklenmiş bir sürümüm var - ' find ... -print0 | xargs -0 ...' hakkında bir şey bilmeden önce kullandım . Bir kopyasını istiyorsanız bana ulaşın - profilime bakın. (Roket bilimi yok - iş neredeyse bu işi yapıyor. Tamamen bir xargs kopyası değil.)


0

Peki ya cat file | xargs | sed 's/ /\n/ig'standart Linux bash araçlarını kullanarak boşlukları yeni hatlara çevirir.


Eğer fileboşluk ve yeni satır içeren, daha sonra bu komutun sonucu imkansız bunları ayırt etmek yapacak, sorar bu ne soru ters yönde gidiyor gibi görünüyor
Max Nanasy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.