Lệnh Pipe, Grep và Sort trong Linux/Unix kèm các ví dụ

⚡ Tóm tắt thông minh

Các lệnh pipe, grep và sort trong Linux và Unix dùng để xâu chuỗi và lọc văn bản: pipe chuyển kết quả đầu ra của lệnh này sang lệnh tiếp theo, grep tìm kiếm các mẫu, và sort sắp xếp các dòng, trong khi filter biến đổi dữ liệu giữa chúng.

  • 🔗 Ống: Ký hiệu đường ống | truyền đầu ra của một lệnh làm đầu vào cho lệnh tiếp theo.
  • 📄 Phân trang: Lệnh `cat` được chuyển hướng đến `less`, `pg` hoặc `more` để hiển thị một tệp dài từng màn hình một.
  • 🔍 grep: Lệnh grep tìm kiếm trong một tệp các dòng khớp với một chuỗi hoặc mẫu nhất định.
  • 🎚️ Các tùy chọn grep: Các cờ như -v, -c, -n, -i và -l đảo ngược, đếm, đánh số, bỏ qua chữ hoa chữ thường và liệt kê các tập tin.
  • 🔤 loại: Lệnh sort sắp xếp các dòng trong một tệp, với các tham số -r, -n và -f để đảo ngược thứ tự, sắp xếp theo số thứ tự và không phân biệt chữ hoa chữ thường.
  • 🧪 Bộ lọc: Các lệnh lọc như grep, sort, awk, sed và wc xử lý dữ liệu đầu vào được truyền qua đường ống và tạo ra kết quả đầu ra.
  • 🤖 Hỗ trợ từ AI: Các trợ lý AI và GitHub Copilot có thể xây dựng và giải thích các quy trình xử lý dữ liệu như pipe, grep và sort.

Các lệnh pipe, grep và sort trong Linux và Unix kèm ví dụ.

Các lệnh pipe, grep và sort là những công cụ được sử dụng nhiều nhất trên máy tính. Linux Dòng lệnh, bởi vì chúng cho phép bạn kết nối các lệnh nhỏ thành một quy trình làm việc mạnh mẽ. Trang này giải thích từng loại với các ví dụ minh họa, sau đó cho thấy cách các bộ lọc liên kết chúng lại với nhau.

Ống trong Linux là gì?

Lệnh pipe trong Linux cho phép bạn sử dụng hai hoặc nhiều lệnh sao cho đầu ra của lệnh này được dùng làm đầu vào cho lệnh tiếp theo. Nói tóm lại, đầu ra của mỗi tiến trình được đưa trực tiếp làm đầu vào cho tiến trình tiếp theo, giống như một đường ống. Ký hiệu '|' biểu thị một đường ống.

Các đường ống giúp bạn kết hợp hai hoặc nhiều lệnh cùng lúc và chạy chúng liên tiếp. Bạn có thể sử dụng các lệnh mạnh mẽ để thực hiện các tác vụ phức tạp một cách nhanh chóng.

Hãy để chúng tôi hiểu điều này với một ví dụ.

Khi bạn sử dụng lệnh 'cat' để xem một tệp tin trải dài nhiều trang, dấu nhắc lệnh sẽ nhanh chóng nhảy đến trang cuối cùng của tệp tin và bạn sẽ không thấy nội dung ở giữa.

Để tránh điều này, bạn có thể chuyển hướng đầu ra của lệnh 'cat' đến lệnh 'less', lệnh này chỉ hiển thị cho bạn một độ dài cuộn nội dung tại một thời điểm.

cat filename | less

Một hình minh họa sẽ làm rõ điều này. Sơ đồ bên dưới cho thấy cách một đường ống truyền đầu ra của lệnh này sang lệnh tiếp theo.

Sơ đồ minh họa một đường ống trong Linux, truyền đầu ra của một lệnh làm đầu vào cho lệnh tiếp theo.

Lệnh 'pg' và 'thêm'

Thay vì dùng lệnh 'less', bạn cũng có thể dùng lệnh 'pg' hoặc 'more':

cat Filename | pg

or

cat Filename | more

Sau đó, bạn có thể xem nội dung tệp theo từng phần nhỏ và cuộn xuống bằng cách nhấn phím Enter. Ảnh chụp màn hình bên dưới hiển thị một tệp được chia trang bằng lệnh "more".

Lệnh `cat` được chuyển tiếp đến lệnh `more` để phân trang một tệp dài từng màn hình một.

Lệnh 'grep'

Giả sử bạn muốn tìm kiếm thông tin cụ thể, chẳng hạn như mã bưu chính, trong một tệp văn bản.

Bạn có thể tự mình đọc lướt nội dung. tracthông tin đó. Một lựa chọn tốt hơn là sử dụng... grep Lệnh này quét tài liệu để tìm thông tin cần thiết và hiển thị kết quả theo định dạng bạn muốn.

Cú pháp:

grep search_string

Hãy cùng xem nó hoạt động như thế nào. Ảnh chụp màn hình bên dưới hiển thị kết quả tìm kiếm.

Lệnh grep tìm kiếm trong tệp mẫu các chuỗi "Apple" và "Eat".

Ở đây, lệnh grep đã tìm kiếm trong tệp 'sample' các chuỗi 'Apple' và 'Eat'. Các tùy chọn sau có thể được sử dụng với lệnh này.

Tùy chọn Chức năng
-v Hiển thị tất cả các dòng không khớp với chuỗi tìm kiếm
-c Chỉ hiển thị số lượng dòng phù hợp
-n Hiển thị dòng phù hợp và số của nó
-i Phù hợp với cả chữ hoa và chữ thường
-l Chỉ hiển thị tên của tệp bằng chuỗi

Hãy thử tùy chọn '-i' trên cùng tệp đã sử dụng ở trên. Ảnh chụp màn hình bên dưới hiển thị kết quả không phân biệt chữ hoa chữ thường.

Lệnh `grep -i` thực hiện tìm kiếm không phân biệt chữ hoa chữ thường cho chữ cái `a`.

Sử dụng tùy chọn '-i', lệnh grep đã lọc chuỗi 'a' (không phân biệt chữ hoa chữ thường) khỏi tất cả các dòng.

Lệnh 'sắp xếp'

Lệnh này giúp sắp xếp nội dung của một tập tin theo thứ tự bảng chữ cái.

Cú pháp cho lệnh này là:

sort Filename

Hãy xem nội dung của một tập tin, được hiển thị bằng lệnh `cat` bên dưới.

Lệnh `cat` hiển thị nội dung chưa được sắp xếp của tệp `abc`.

Việc chạy lệnh sort sẽ sắp xếp các dòng đó theo thứ tự bảng chữ cái, như hình bên dưới.

Lệnh sort sắp xếp nội dung của tệp abc theo thứ tự bảng chữ cái.

Ngoài ra còn có các phần mở rộng cho lệnh này, và chúng được liệt kê bên dưới.

Tùy chọn Chức năng
-r Reversesắp xếp s
-n Sắp xếp theo số
-f Sắp xếp không phân biệt chữ hoa chữ thường

Ví dụ bên dưới hiển thị cách sắp xếp ngược lại nội dung trong tệp 'abc'.

Lệnh `sort -r` đảo ngược thứ tự sắp xếp nội dung của tệp `abc`.

Bộ lọc là gì?

Linux có rất nhiều lệnh lọc như awk, grep, sed, spell và wc. Một bộ lọc nhận đầu vào từ một lệnh, thực hiện một số xử lý và trả về đầu ra.

Khi bạn kết nối hai lệnh với nhau bằng đường ống, đầu ra đã được "lọc" của lệnh đầu tiên sẽ được chuyển đến lệnh tiếp theo. Sơ đồ bên dưới minh họa cách bộ lọc được tích hợp vào đường ống xử lý dữ liệu.

Sơ đồ bộ lọc Linux nhận đầu vào qua đường ống, xử lý đầu vào và tạo ra đầu ra.

Chúng ta hãy cùng hiểu điều này thông qua một ví dụ. Chúng ta có tập tin 'sample' như được hiển thị bằng lệnh cat bên dưới.

Lệnh `cat` hiển thị nội dung của tệp mẫu trước khi lọc.

Chúng ta muốn chỉ tô sáng những dòng không chứa ký tự 'a', nhưng kết quả phải được đảo ngược thứ tự. Để làm điều này, có thể sử dụng cú pháp sau:

cat sample | grep -v a | sort -r

Hãy cùng xem kết quả, được hiển thị trong ảnh chụp màn hình bên dưới.

Lệnh `cat` được chuyển qua `grep -v` và `sort -r`, tạo ra các dòng được sắp xếp ngược lại mà không có chữ cái `a`.

Câu Hỏi Thường Gặp

Dấu gạch dọc (|) chuyển tiếp đầu ra của một lệnh trực tiếp đến một lệnh khác, nối chúng lại với nhau. Dấu chuyển hướng (> và <) kết nối một lệnh với một tệp, ghi đầu ra vào tệp hoặc đọc đầu vào từ tệp. Dấu gạch dọc liên kết các lệnh; dấu chuyển hướng liên kết các lệnh và tệp.

grep là viết tắt của Global Regular Expression Print (In biểu thức chính quy toàn cục). Nó quét một tệp hoặc đầu vào từng dòng một và in ra mọi dòng khớp với mẫu bạn cung cấp. Tên gọi này xuất phát từ lệnh g/re/p cũ của trình soạn thảo ed, thực hiện cùng một tìm kiếm.

Lệnh `sort` có tùy chọn `-u` cho phép sắp xếp và loại bỏ các dòng trùng lặp trong một bước: `sort -u file`. Bạn cũng có thể sử dụng lệnh `pipe` cho lệnh `uniq`, ví dụ: `sort file | uniq`, vì `uniq` chỉ loại bỏ các dòng trùng lặp đã nằm cạnh nhau.

Kết thúc quy trình bằng cách chuyển hướng: `cat sample | grep -va | sort -r > result.txt` ghi kết quả cuối cùng vào một tệp. Để xem kết quả trên màn hình và lưu cùng lúc, hãy chuyển tiếp kết quả vào lệnh `tee`.

Lệnh `grep` tìm kiếm các dòng khớp với một mẫu văn bản bên trong các tệp. Lệnh `find` định vị các tệp và thư mục theo tên, kích thước, loại hoặc ngày tháng. Nói tóm lại, `grep` xem xét nội dung tệp, trong khi `find` tìm kiếm các tệp trong toàn bộ cây thư mục.

Lệnh `tee` đọc dữ liệu từ một đường ống và ghi dữ liệu đồng thời ra màn hình và một hoặc nhiều tệp, ví dụ: `grep error log | tee errors.txt`. Nó cho phép bạn lưu trữ kết quả trung gian mà không làm gián đoạn đường ống xử lý dữ liệu.

Các trợ lý AI có thể đề xuất chuỗi lệnh được kết nối phù hợp từ một yêu cầu bằng tiếng Anh thông thường, giải thích các cờ grep hoặc sort không quen thuộc và phát hiện lỗi trong quy trình. Các công cụ học máy cũng quét đầu ra nhật ký được kết nối để gắn cờ các bất thường mà việc lọc thủ công sẽ bỏ sót.

Vâng. Trợ lý GitHub Có thể tạo ra các chuỗi lệnh kết hợp cat, grep và sort từ một đoạn bình luận ngắn mô tả những gì bạn cần, và tự động hoàn thành các lệnh khi bạn gõ. RevHãy xem xét bất kỳ quy trình xử lý dữ liệu nào được đề xuất dựa trên dữ liệu mẫu, đặc biệt là các tùy chọn sắp xếp lại hoặc xóa dòng.

Tóm tắt bài viết này với: