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.
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.
vim --version 2>&1 | sed 1q
:)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.
Yanıtlar:
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) .
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
head -qn1 file_*.txt