Stdout'a çıktı ve aynı zamanda bir dosyaya grep


18

Metin çıktı bir komut dosyası var stdout. Tüm bu çıktıyı terminalimde görmek istiyorum ve aynı zamanda bazı satırları filtrelemek ve bir dosyaya kaydetmek istiyorum. Misal:

$ myscript
Line A
Line B
Line C

$ myscript | grep -P 'A|C' > out.file

$ cat out.file
Line A
Line C

Terminalde ilk komutun çıktısını görmek ve ikinci komutun çıktısını bir dosyaya kaydetmek istiyorum. Aynı zamanda. Kullanmayı denedim tee, ama sonuçsuz veya daha iyi, ters sonuçla .

Yanıtlar:


27

Terminalde ilk komutun çıktısını görmek ve ikinci komutun çıktısını bir dosyaya kaydetmek istiyorum.

Baktığınız şeyin stdout veya stderr'den olup olmadığı önemli olmadığı sürece , yine de kullanabilirsiniz tee:

myscript | tee /dev/stderr | grep -P 'A|C' > out.file

Linux üzerinde çalışacak; "/ Dev / stderr" öğesinin diğer * nixes için de geçerli olup olmadığını bilmiyorum.


9
/dev/stderryaygındır. /dev/tty(mevcut terminal anlamına gelir) burada da çalışır ve standarttır .
Gilles 'SO- kötü olmayı bırak'

@Gilles: Harika. bir komut dosyası terminaline tee /dev/ttyyazdırmak zorunda kaldım stdoutve stdinbaşka bir komuta da boru için gereklilik için harika hizmet ! Thankees! :-)
jamadagni

8
{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1

Veya işlem ikamesi ile (ksh93, zsh veya bash):

... | tee >(grep -e A -e C > out.file)

Zsh ile:

... >&1 > >(grep -e A -e C > out.file)

İlkini kullanmak zorunda olduğumu buldum çünkü grep'in çıkış kodunu koruyor. Ayrıca, / dev dosya sistemine herhangi bir nedenle erişemiyorsanız, /dev/fd/3bunun yerine değiştirilebilir>(cat 1>&3)
golvok

4

İşte başka bir yol sed:

myscript | sed '/PATTERN/w out.file'

Varsayılan olarak, sedher satırı yazdırır, bu durumda stdout stdin ile aynı olur (yani myscriptekranın tüm çıktısını göreceksiniz).
Buna ek olarak, tüm satırlar eşleştirme PATTERNedilecektir wiçin Rittenout.file


-1

tee komutunu nasıl kullandığınızı belirtmediniz, ancak bunun çalışması gerekir:

myscript | grep -P 'A|C' | tee out.file

en azından birkaç dakika önce sunucumda çalıştı ...


4
Ama eğer yanılmıyorsam, bu şekilde ekrandakileri de sersemletirsiniz . Tüm çıktıları ekranda görmek ve sadece dosyaya ne olduğunu filtrelemek istiyorum .
lorenzo-s
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.