2012-11-15 5 views

cevap

24
grep file foo | while read line ; do echo "$line" | date %s.%N ; done 

: girişinin her satır için

grep file foo | while read line 
do 
    echo "$line" | date %s.%N 
done 

, read değişken $line içine değeri verecek ve while ifadesi do ve done arasındaki döngü gövdesi çalıştıracaktır. Değer artık bir stdin değil ve bir değişken olduğundan, ben de onu stdin'e geri itmek için echo kullandım, ancak tarih bu şekilde çalıştığı varsayılarak date %s.%N "$line" yapardınız.

for her zaman boşluklar üzerinde kırar ve bu dosyaların okuma listeleri için bir kabus haline gelir, çünkü benzer for line in `grep file foo` kullanarak kaçının:

find . -iname "*blah*.dat" | while read filename; do .... 

for ile başarısız olur.

+0

Sorun tam pencereler yoluna eşleşmeleri dönüştürme http://en.wikipedia.org/wiki/Xargs

grep file foo | xargs date %s.%N 

örnek. Grep'in bir dosyadan (-f) birden fazla desen okuma yeteneği veya xargs'ın stdin'den komut oluşturma yeteneği gibi pek çok toplu iş için unix araçları vardır. –

+0

Should bu değil be: grep foo dosyası ------- ADI grep, egrep, fgrep, rgrep - bir desen ÖZET grep [Seçenekler] MODEL [DOSYA eşleşen yazdırma satırları .. .] – Xofo

+0

Betiği nasıl uygulayabilirim: grep file foo | satırını okurken echo "$ line" | date% s.% N tamamlandı Bir dosya koymam gerekiyor mu? –

7

Gerçekten ihtiyacınız olan şey bir xargs komutudur. bazı dosyaları eşleşen ve Cygwin ortamında

$ find $(pwd) -type f -exec ls -1 {} \; | grep '\(_en\|_es\|_zh\)\.\(path\)$' | xargs cygpath -w 
0
grep command_string file | sh - 
+0

Merhaba @James, SO'ya Hoş Geldiniz, bazı açıklama eklemek için iyi bir fikirdir, bu da cevabı artıracaktır ve bu durum, daha fazla desteklenecektir. –