grep
. Có nhiều biểu thức chính quy sẽ chọn những thứ này. Ở đây, tôi đang tìm kiếm 5 lần lặp lại gồm 2 chữ cái hoặc số theo sau là dấu hai chấm, sau đó là hai ký tự bất kỳ. Việc -i
làm cho trường hợp khớp không nhạy cảm và -o
làm cho grep
chỉ in phần phù hợp. -E
cho phép mở rộng biểu thức chính quy. Regex tương tự cũng hoạt động với PCREs ( -P
).
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed
. Việc -n
triệt tiêu đầu ra bình thường và -r
cho phép các biểu thức chính quy mở rộng. Sử dụng cùng một biểu thức như trên, tập lệnh này sẽ cố gắng thay thế mọi thứ trên dòng bằng phần của nó phù hợp với biểu thức chính quy. Nếu thay thế thành công, dòng kết quả được in (vì p
ở cuối thay thế).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk
. Nếu dòng bắt đầu bằng một ký tự từ ( [a-zA-Z0-9_]
) và có 5 trường, hãy in trường cuối cùng.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, ở đâu, như thường lệ, có nhiều hơn một cách để làm điều đó. Đây là logic tương tự như awk
trên. Các -a
perl nói để phân chia từng dòng đầu vào thành @F
mảng.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
Ngoài ra, bạn có thể sử dụng regex từ các phương pháp trước:
ifconfig -a | perl -lne '/(([a-z0-9]{2}:){5}..)/ && print $1'
Coreutils.
LANG_ALL=C ifconfig -a | grep 'HWadd' | tr -s ' ' '\t' | cut -f 5
LANG=C ifconfig -a
thay vìifconfig -a
cài đặt không phải tiếng Anh, có thể là vấn đề với grep. (tức là trong hệ thống của tôi,HWaddr
làdirecciónHW
)