12 lệnh lọc văn bản trên Centos / Ubuntu / Debian / Fedora
Trong bài viết này, chúng ta sẽ xem xét một số công cụ dòng lệnh lọc văn bản trên Linux. Một bộ lọc là một chương trình đọc đầu vào tiêu chuẩn, thực hiện một hoạt động trên nó và ghi kết quả vào đầu ra tiêu chuẩn.
Vì vậy, chúng có thể được sử dụng để xử lý thông tin một cách mạnh mẽ, chẳng hạn như tái cấu trúc đầu ra để tạo ra báo cáo hữu ích, sửa đổi văn bản trong các tệp tin và nhiều tác vụ quản trị hệ thống khác. Với những điều đó, dưới đây là một số bộ lọc tệp tin hoặc văn bản hữu ích trên Linux.
Lệnh awk
Awk là một ngôn ngữ quét và xử lý mẫu đáng chú ý, nó có thể được sử dụng để xây dựng bộ lọc hữu ích trên Linux. Ngoài ra, hãy đọc qua trang man của awk để biết thêm thông tin và tùy chọn sử dụng:
$ man awk
Lệnh sed
Trang man của sed cung cấp các tùy chọn điều khiển và hướng dẫn bổ sung. Bạn có thể xem trang man của sed bằng cách chạy lệnh sau trong terminal:
$ man sed
Lệnh Grep, Egrep, Fgrep, Rgrep
Các lệnh lọc văn bản này xuất ra các dòng khớp với một mẫu cho trước. Chúng đọc các dòng từ một tệp tin hoặc đầu vào tiêu chuẩn và mặc định in ra tất cả các dòng khớp với mẫu đó ra đầu ra tiêu chuẩn.
Lưu ý: Chương trình chính là grep, các biến thể khác chỉ đơn giản là việc sử dụng các tùy chọn cụ thể của grep như dưới đây (và vẫn được sử dụng để tương thích ngược):
$ egrep = grep -E $ fgrep = grep -F $ rgrep = grep -r
Dưới đây là một số lệnh grep cơ bản:
tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd aaronkilik:x:1001:1001::/home/aaronkilik: tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik" aaronkilik:x:1001:1001::/home/aaronkilik:
Lệnh head
Lệnh head được sử dụng để hiển thị các phần đầu của một tệp tin, mặc định nó hiển thị 10 dòng đầu tiên. Bạn có thể sử dụng tùy chọn -n num để chỉ định số dòng cần hiển thị:
tecmint@TecMint ~ $ head /var/log/auth.log Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0) Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root Jan 2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0) tecmint@TecMint ~ $ head -n 5 /var/log/auth.log Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0) Jan 2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root Jan 2 10:51:34 TecMint sudo: tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py Jan 2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0) Jan 2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Lệnh tail
Lệnh tail được sử dụng để hiển thị các phần cuối của một tệp tin (mặc định là 10 dòng). Bạn có thể sử dụng tùy chọn -n num để chỉ định số dòng cần hiển thị. Lệnh dưới đây sẽ hiển thị 5 dòng cuối cùng của tệp tin đã được chỉ định:
tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Ngoài ra, lệnh tail có tùy chọn đặc biệt -f để theo dõi thay đổi trong một tệp tin theo thời gian thực (đặc biệt là các tệp tin nhật ký). Lệnh sau sẽ cho phép bạn theo dõi các thay đổi trong tệp tin đã được chỉ định:
tecmint@TecMint ~ $ tail -f /var/log/auth.log Jan 6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22. Jan 6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting. Jan 6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22. Jan 6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22. Jan 6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Hãy đọc qua trang man của lệnh tail để có danh sách đầy đủ các tùy chọn sử dụng và hướng dẫn:
$ man tail
Lệnh sort
Lệnh sort được sử dụng để sắp xếp các dòng trong một tệp văn bản hoặc từ đầu vào tiêu chuẩn. Dưới đây là nội dung của một tệp có tên domains.list:
tecmint@TecMint ~ $ cat domains.list tecmint.com tecmint.com news.tecmint.com news.tecmint.com linuxsay.com linuxsay.com windowsmint.com windowsmint.com
Bạn có thể chạy lệnh sort đơn giản để sắp xếp nội dung của tệp như sau:
tecmint@TecMint ~ $ sort domains.list linuxsay.com linuxsay.com news.tecmint.com news.tecmint.com tecmint.com tecmint.com windowsmint.com windowsmint.com
Lệnh uniq
Một trong những lệnh lọc văn bản tiếp theo là lệnh uniq, chúng được sử dụng để báo cáo hoặc loại bỏ các dòng trùng lặp, nó lọc các dòng từ đầu vào chuẩn và ghi kết quả vào đầu ra chuẩn. Sau khi chạy lệnh sort trên một luồng đầu vào, bạn có thể loại bỏ các dòng trùng lặp bằng lệnh uniq như ví dụ dưới đây.
Để hiển thị số lần xuất hiện của mỗi dòng, sử dụng tùy chọn -c và bỏ qua sự khác biệt về chữ hoa chữ thường khi so sánh bằng cách sử dụng tùy chọn -i:
tecmint@TecMint ~ $ cat domains.list tecmint.com tecmint.com news.tecmint.com news.tecmint.com linuxsay.com linuxsay.com windowsmint.com tecmint@TecMint ~ $ sort domains.list | uniq -c 2 linuxsay.com 2 news.tecmint.com 2 tecmint.com 1 windowsmint.com
Hãy đọc qua trang man của lệnh uniq để biết thêm thông tin và các tùy chọn sử dụng:
$ man uniq
Lệnh fmt
fmt là một công cụ định dạng văn bản đơn giản và hiệu quả, nó sắp xếp lại các đoạn văn trong tệp đã chỉ định và hiển thị kết quả trên đầu ra tiêu chuẩn. Dưới đây là nội dung được trích xuất từ tệp domain-list.txt:
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
Để định dạng lại nội dung trên thành một danh sách chuẩn, chạy lệnh sau với tùy chọn -w để xác định độ rộng tối đa của dòng:
tecmint@TecMint ~ $ cat domain-list.txt 1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com tecmint@TecMint ~ $ fmt -w 1 domain-list.txt 1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
Lệnh pr
Lệnh lọc văn bản - pr chuyển đổi các tệp văn bản hoặc đầu vào tiêu chuẩn để in. Ví dụ, trên các hệ thống Debian, bạn có thể liệt kê tất cả các gói đã được cài đặt như sau:
$ dpkg -l
Để tổ chức danh sách thành các trang và cột sẵn sàng để in, sử dụng lệnh sau đây:
tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20 2017-01-06 13:19 Page 1
Desired=Unknown/Install ii adduser ii apg | Status=Not/Inst/Conf- ii adwaita-icon-theme ii app-install-data |/ Err?=(none)/Reinst-r ii adwaita-icon-theme- ii apparmor ||/ Name ii alsa-base ii apt +++-=================== ii alsa-utils ii apt-clone ii accountsservice ii anacron ii apt-transport-https ii acl ii apache2 ii apt-utils ii acpi-support ii apache2-bin ii apt-xapian-index ii acpid ii apache2-data ii aptdaemon ii add-apt-key ii apache2-utils ii aptdaemon-data
2017-01-06 13:19 Page 2
ii aptitude ii avahi-daemon ii bind9-host ii aptitude-common ii avahi-utils ii binfmt-support ii apturl ii aview ii binutils ii apturl-common ii banshee ii bison ii archdetect-deb ii baobab ii blt ii aspell ii base-files ii blueberry ii aspell-en ii base-passwd ii bluetooth ii at-spi2-core ii bash ii bluez ii attr ii bash-completion ii bluez-cups ii avahi-autoipd ii bc ii bluez-obexd .....
Các tùy chọn sử dụng ở đây là:
- --column xác định số cột được tạo trong đầu ra.
- -l chỉ định độ dài trang (mặc định là 66 dòng).
Lệnh tr
Trình công cụ này chuyển đổi hoặc xóa các ký tự từ đầu vào tiêu chuẩn và viết kết quả ra đầu ra tiêu chuẩn. Cú pháp sử dụng tr như sau:
$ tr options set1 set2
Hãy xem các ví dụ dưới đây. Trong lệnh đầu tiên, set1 ([:upper:]) đại diện cho trường hợp của các ký tự đầu vào (tất cả là chữ in hoa).
Tiếp theo, set2 ([:lower:]) đại diện cho trường hợp mà các ký tự kết quả sẽ có. Điều này cũng áp dụng cho ví dụ thứ hai và chuỗi thoát ra \n có nghĩa là in kết quả trên một dòng mới:
tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:] www.tecmint.com tecmint@TecMint ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:] NEWS.TECMINT.COM
Lệnh more
Lệnh more là một công cụ hữu ích để xem nội dung tệp dưới dạng trang, người dùng có thể nhấn [Enter] để xem thêm thông tin. Bạn có thể sử dụng nó để xem các tệp lớn như sau:
tecmint@TecMint ~ $ dmesg | more [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers' [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. [ 0.000000] x86/fpu: Using 'eager' FPU context switches. [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable [ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable --More--
Lệnh less
Lệnh less là tương tự như lệnh more ở trên, nhưng nó cung cấp các tính năng bổ sung và nhanh hơn một chút với các tệp lớn. Bạn có thể sử dụng nó theo cách tương tự như more:
tecmint@TecMint ~ $ dmesg | less [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] Centaur CentaurHauls [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers' [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. [ 0.000000] x86/fpu: Using 'eager' FPU context switches. [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable [ 0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable :
Đó là tất cả 12 lệnh lọc văn bản hữu ích trong Linux. Những ví dụ bên trên sẽ giúp bạn hình dung rõ ràng hơn và áp dụng chúng vào thực tế để quản lý hệ điều hành.