Bir kabuk komutunun çıktısının ilk satırını alın


96

Sürüm numarasını okumaya çalışırken vim, görmezden gelmem gereken bir sürü ek satır alıyorum. Kılavuzunu okumaya headçalıştım ve aşağıdaki komutu denedim:

vim --version | head -n 1

Bunun doğru yaklaşım olup olmadığını bilmek istiyorum.


4
Nasıl başarısız oldu? Benim için çalışıyor.
choroba

1
Sözdizimi doğru. Hata nedir ..?
Kaushik Nayak

1
Bu benim için işe yarıyor, ancak belki de sürüm bilgisini stderr'e yazan bir vim sürümünü kullanıyorsunuz. Deneyinvim --version 2>&1 | sed 1q
William Pursell

Benim :)için stderrde işe yarıyor - yani evet, yaklaşımınız doğru . @WilliamPursell bir kontrol sağladığından , paketinizin bu bilgileri çıkarıp çıkarmadığını kontrol edin.
David C. Rankin

Yanıtlar:


132

Evet, bu, bir komuttan ilk çıktı satırını almanın bir yoludur.

Komut, aynı şekilde yakalamak istediğiniz herhangi bir şeyi standart hataya verirse, komutun standart hatasını standart çıkış akışına yeniden yönlendirmeniz gerekir:

utility 2>&1 | head -n 1

İlk satırı yakalamanın (ilk satırdan sed 1qsonra çık) dahil olmak üzere başka birçok yolu vardır.sed -n 1p (yalnızca ilk satırı yazdır, ancak her şeyi oku), awk 'FNR == 1'(yalnızca ilk satırı yazdır, ama yine her şeyi oku) .


4

Kullanmak istiyorum:

awk 'FNR <= 1' file_*.txt

@Kusalananda'nın işaret ettiği gibi, komut satırındaki ilk satırı yakalamanın birçok yolu vardır, ancak head -n 1ek bilgi yazdıracağından joker karakter kullanırken en iyi seçenek olmayabilir. Değişen 'FNR == i'için'FNR <= i' , ilk olarak i çizgileri elde edilmesine olanak sağlar.

Örneğin, file_1.txt, ... file_n.txt adlı n dosyanız varsa:

awk 'FNR <= 1' file_*.txt

hello
...
bye

Ancak headjoker karakterlerle dosyanın adını yazdırın:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye

1
Bkzhead -qn1 file_*.txt
F.Hauri
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.