Trong khi cố gắng đọc số phiên bản vim
, tôi nhận được rất nhiều dòng bổ sung mà tôi cần phải bỏ qua. Tôi đã cố đọc hướng dẫn sử dụng head
và thử lệnh sau:
vim --version | head -n 1
Tôi muốn biết liệu đây có phải là cách tiếp cận chính xác?
Trong khi cố gắng đọc số phiên bản vim
, tôi nhận được rất nhiều dòng bổ sung mà tôi cần phải bỏ qua. Tôi đã cố đọc hướng dẫn sử dụng head
và thử lệnh sau:
vim --version | head -n 1
Tôi muốn biết liệu đây có phải là cách tiếp cận chính xác?
vim --version 2>&1 | sed 1q
:)
Kiểm tra xem gói của bạn có xuất ra thông tin đó stderr
như @WilliamPursell cung cấp kiểm tra hay không.
Câu trả lời:
Vâng, đó là một cách để lấy dòng đầu ra đầu tiên từ một lệnh.
Nếu lệnh xuất bất kỳ thứ gì thành lỗi tiêu chuẩn mà bạn muốn nắm bắt theo cách tương tự, bạn cần chuyển hướng lỗi tiêu chuẩn của lệnh đến luồng đầu ra tiêu chuẩn:
utility 2>&1 | head -n 1
Có nhiều cách khác để ghi lại dòng đầu tiên, bao gồm sed 1q
(bỏ sau dòng đầu tiên), sed -n 1p
(chỉ in dòng đầu tiên, nhưng đọc mọi thứ), awk 'FNR == 1'
(chỉ in dòng đầu tiên, nhưng đọc lại mọi thứ), v.v.
Tôi sẽ dùng:
awk 'FNR <= 1' file_*.txt
Như @Kusalananda đã chỉ ra rằng có nhiều cách để nắm bắt dòng đầu tiên trong dòng lệnh nhưng sử dụng head -n 1
có thể không phải là lựa chọn tốt nhất khi sử dụng ký tự đại diện vì nó sẽ in thêm thông tin. Thay đổi 'FNR == i'
để 'FNR <= i'
cho phép lấy i dòng đầu tiên.
Ví dụ: nếu bạn có n tệp có tên tệp_1.txt, ... tệp_n.txt:
awk 'FNR <= 1' file_*.txt
hello
...
bye
Nhưng với các head
ký tự đại diện in tên của tệp:
head -1 file_*.txt
==> file_1.csv <==
hello
...
==> file_n.csv <==
bye
head -qn1 file_*.txt