Dapatkan baris pertama dari keluaran perintah shell
96
Saat mencoba membaca nomor versi vim, saya mendapatkan banyak baris tambahan yang perlu saya abaikan. Saya mencoba membaca manual headdan mencoba perintah berikut:
Itu berfungsi untuk saya, tetapi mungkin Anda menggunakan versi vim yang menulis info versi ke stderr. Cobavim --version 2>&1 | sed 1q
William Pursell
Berfungsi untuk saya juga - jadi ya, pendekatan Anda benar :)Periksa apakah paket Anda mengeluarkan info itu stderrsebagai @WilliamPursell menyediakan pemeriksaan.
Ya, itu adalah salah satu cara untuk mendapatkan baris pertama keluaran dari sebuah perintah.
Jika perintah mengeluarkan sesuatu ke kesalahan standar yang ingin Anda tangkap dengan cara yang sama, Anda perlu mengarahkan kesalahan standar perintah ke aliran keluaran standar:
utility 2>&1 | head -n 1
Ada banyak cara lain untuk menangkap baris pertama juga, termasuk sed 1q(berhenti setelah baris pertama), sed -n 1p(hanya mencetak baris pertama, tetapi membaca semuanya), awk 'FNR == 1'(hanya mencetak baris pertama, tetapi sekali lagi, membaca semuanya) dll.
Seperti yang ditunjukkan @Kusalananda, ada banyak cara untuk menangkap baris pertama dalam baris perintah tetapi menggunakan opsi ini head -n 1mungkin bukan pilihan terbaik saat menggunakan karakter pengganti karena ini akan mencetak info tambahan. Mengubah 'FNR == i'ke 'FNR <= i'memungkinkan untuk mendapatkan baris i pertama.
Misalnya, jika Anda memiliki n file bernama file_1.txt, ... file_n.txt:
vim --version 2>&1 | sed 1q
:)
Periksa apakah paket Anda mengeluarkan info itustderr
sebagai @WilliamPursell menyediakan pemeriksaan.Jawaban:
Ya, itu adalah salah satu cara untuk mendapatkan baris pertama keluaran dari sebuah perintah.
Jika perintah mengeluarkan sesuatu ke kesalahan standar yang ingin Anda tangkap dengan cara yang sama, Anda perlu mengarahkan kesalahan standar perintah ke aliran keluaran standar:
Ada banyak cara lain untuk menangkap baris pertama juga, termasuk
sed 1q
(berhenti setelah baris pertama),sed -n 1p
(hanya mencetak baris pertama, tetapi membaca semuanya),awk 'FNR == 1'
(hanya mencetak baris pertama, tetapi sekali lagi, membaca semuanya) dll.sumber
Saya akan menggunakan:
awk 'FNR <= 1' file_*.txt
Seperti yang ditunjukkan @Kusalananda, ada banyak cara untuk menangkap baris pertama dalam baris perintah tetapi menggunakan opsi ini
head -n 1
mungkin bukan pilihan terbaik saat menggunakan karakter pengganti karena ini akan mencetak info tambahan. Mengubah'FNR == i'
ke'FNR <= i'
memungkinkan untuk mendapatkan baris i pertama.Misalnya, jika Anda memiliki n file bernama file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt hello ... bye
Tetapi dengan
head
wildcard mencetak nama file:head -1 file_*.txt ==> file_1.csv <== hello ... ==> file_n.csv <== bye
sumber
head -qn1 file_*.txt