Trong bài viết này, FUNiX sẽ hướng dẫn bạn cách thao tác văn bản bằng lệnh cut.
Hệ điều hành dựa trên Linux cung cấp nhiều tiện ích xử lý văn bản dòng lệnh. Lệnh cut là một trong những tiện ích thao tác văn bản như vậy sử dụng dấu phân cách (delimiters), byte, trường (field) và cột để tìm nạp (fetch) một chuỗi bắt buộc từ cơ sở dữ liệu tệp phẳng (flat-file database) hoặc một dòng.
Vì cơ sở dữ liệu tệp phẳng không có mối quan hệ cấu trúc và các bản ghi được phân tách với sự trợ giúp của dấu phân cách, nên cut là một công cụ lý tưởng để trích xuất các ký tự hoặc byte thông tin. Bài viết này giới thiệu chi tiết về lệnh cut và trình bày một số ví dụ thực tế với các tùy chọn bộ lọc (filter option) khác nhau để giúp bạn bắt đầu với công cụ này.
1. Tổng quan về Lệnh cut
Lệnh cut sử dụng cú pháp cơ bản sau:
cut <option> <file>Bạn cũng có thể đặt nó bằng các lệnh khác như sau:
echo “string_of_characters” | cut <options>Lưu ý rằng sự vắng mặt của bất kỳ tùy chọn nào sẽ tạo ra lỗi. Dưới đây là một số cờ (flag) bạn có thể sử dụng với cut để gọi các chức năng khác nhau của nó:
| Lựa chọn | Sự miêu tả |
|---|---|
| -b | Cắt theo vị trí byte |
| -C | Cắt theo vị trí ký tự |
| -d | Trích xuất chuỗi bằng cách sử dụng dấu phân cách được chỉ định với tùy chọn trường (-f) |
| -f | Trích xuất theo một trường cụ thể |
| -S | Trích xuất chỉ cho dấu phân cách |
| –complement | Hiển thị đầu ra ngoại trừ trường mà bạn đã chỉ định |
| –output-delimiter | Thay thế dấu phân cách hiện có bằng dấu bạn đã chỉ định |
Dưới đây là một số ví dụ về lệnh cắt sẽ giúp bạn hiểu rõ hơn về công cụ và các chức năng của nó.
2. Trích xuất các ký tự cụ thể từ một chuỗi
Sử dụng tùy chọn -b để lấy các chuỗi ký tự theo số byte của chúng, như sau:
echo "Hello World" | cut -b 1,2,3,5,8,9Đầu ra:
HeloorBạn cũng có thể chỉ định một đường dẫn tệp thay vì một chuỗi:
cut -b 1,2,3,4,5 filename.txtHoặc bạn có thể trích xuất các ký tự theo vị trí của chúng trong văn bản. Sử dụng tùy chọn -c theo sau là trình tự/thứ tự các ký tự bạn cần lấy như sau:
echo "Hello World" | cut -c 1,2,3,5,6,8,10,11Đầu ra:
Helo oldTương tự, để lấy các trường hoặc cột từ cơ sở dữ liệu tệp phẳng, hãy sử dụng lệnh cut với tùy chọn cờ -f:
cut -f 3 database.txt
3. Cắt phạm vi byte hoặc ký tự
Bạn cũng có thể sử dụng cờ -b với lệnh cut để trích xuất và hiển thị nhiều dải byte như sau:
cut -b 1-7,16-23 database.txt
Bạn có thể xác định phạm vi để lấy các ký tự bằng cách sử dụng cờ -c như sau:
cut -c 1-7,16-23 database.txt
4. Trích xuất văn bản từ vị trí bắt đầu hoặc kết thúc
Sử dụng tùy chọn -cn- để trích xuất văn bản từ ký tự thứ n trở đi đến cuối dòng, trong đó n là chỉ số của một ký tự trong chuỗi.
Ví dụ: để trích xuất chuỗi bắt đầu từ ký tự thứ 6 đến cuối dòng:
cut -c6- database.txt
Hoặc sử dụng lệnh sau để tìm nạp từ đầu cho đến m ký tự cuối cùng từ tệp:
cut -c-8 database.txt5. Cắt nhiều trường từ một tệp
Bạn cũng có thể lấy nhiều trường từ một tệp bằng cờ -f .
cut -f 1,2 database.txtĐầu ra:
NAME AGE
Jhon 20
Lisa 24
Jack 18
Bruce 23
Nancy 19>>> Đọc ngay: Cách bắt đầu sử dụng Linux
6. Trích xuất văn bản bằng dấu phân cách
Bạn có thể sử dụng cờ -d để chỉ định dấu phân cách với tùy chọn-f. Dấu phân cách chỉ định ký tự được sử dụng để phân tách các trường trong tệp văn bản.
Ví dụ: để trích xuất cột đầu tiên của tệp /etc/passwd, hãy sử dụng dấu hai chấm (:) làm dấu phân cách:
cut -d ‘:’ -f 1 /etc/passwd
Tương tự, giá trị dấu phân cách trong dòng văn bản nhất định là một khoảng trắng:
echo "The 1% of the 1%" | cut -d ' ' -f 2,3Đầu ra:
1% of7. Thay đổi Dấu phân cách đầu ra cho màn hình
Cờ –output-delimiter thêm tính linh hoạt cho đầu ra lệnh cut. Ví dụ: bạn có thể sử dụng cờ này để hiển thị đầu ra trong một dòng riêng biệt bằng cách sử dụng giá trị $’\n’ (dòng mới), như sau:
grep alice /etc/passwd | cut -d ':' -f 1,5,7 --output-delimiter=$'\n'Đầu ra:
alice
Alice
/bin/shHơn nữa, bạn cũng có thể thay thế dấu phân cách của tệp đầu vào bằng dấu phân cách bạn chọn trong đầu ra bằng cách sử dụng cờ –output-delimiter:
grep root /etc/passwd | cut -d ':' -f 1,6,7 --output-delimiter=@Đầu ra:
root@/root@/bin/bash
nm-openvpn@/var/lib/openvpn/chroot@/usr/sbin/nologin8. Cắt các trường chỉ khi một dòng chứa dấu phân cách
Sử dụng cờ -s để trích xuất các trường chỉ khi các dòng chứa dấu phân cách. Ví dụ: lệnh sau sẽ không tìm nạp (fetch) trường -f 1 trừ khi nó có dấu phân cách:
echo "HelloWorld" | cut -d " " -f 1 -sNgược lại, lệnh dưới sẽ tạo một đầu ra là chuỗi chứa dấu phân cách được chỉ định:
echo "Hello World" | cut -d " " -f 1 -sĐầu ra:
HelloTương tự, bạn cũng có thể sử dụng bất kỳ ký tự nào khác làm dấu phân cách:
echo "Hello:World" | cut -d ":" -f 2 -sĐầu ra:
World9. Bổ sung đầu ra của lệnh
Tiện ích cut cũng cho phép bạn xuất (print) tất cả các trường ngoại trừ trường được chỉ định. Sử dụng tùy chọn –complement như sau để tìm nạp tất cả các chi tiết tài khoản người dùng root ngoại trừ cột thứ năm:
grep "root" /etc/passwd | cut -d ':' --complement -s -f 5Đầu ra:
root:x:0:0:/root:/bin/bashTương tự, trong ví dụ bên dưới, tham số -f 1 phải hiển thị Hello, tuy nhiên, do tùy chọn –complement, nó chỉ trả về phần còn lại của nó.
echo "Hello to the whole World" | cut -d " " -f 1 --complementĐầu ra:
to the whole World>>> Đọc ngay: 6 yếu tố cần xem xét khi lựa chọn một bản phân phối Linux
10. Pipe* lệnh cut với tiện ích sed
*pipe: lấy output từ câu lệnh này và dùng nó làm input cho câu lệnh kế tiếp.
Bạn có thể kết hợp lệnh cut với đầu ra tiêu chuẩn của các lệnh Linux/Unix khác.
sed là một trong những công cụ chỉnh sửa văn bản mà bạn có thể sử dụng để xóa, chèn và thay thế văn bản của mình. Bạn có thể dễ dàng chuyển đầu ra của nó tới lệnh cut.
Trong ví dụ dưới đây, đầu ra lệnh grep được chuyển đến tiện ích sed thay thế dấu hai chấm (:) bằng dấu gạch ngang (-) và sau đó, cut hiển thị các trường 1, 6 và 7 như sau:
grep alice /etc/passwd | sed 's/:/-/g' | cut -d ' ' -f 1,5,7Đầu ra:
alice-x-1005-1008-Alice-/home/new/alice-/bin/sh11. Làm việc với văn bản trên Linux bằng cách sử dụng cut
Lệnh cắt là một tiện ích dòng lệnh linh hoạt và hiệu quả mà bạn có thể sử dụng để thao tác văn bản. Nó có thể lọc ra một số từ nhất định từ các tệp hoặc dữ liệu đầu vào tiêu chuẩn. Tiện ích này cũng có một ưu điểm là người dùng có thể giới hạn văn bản mà họ muốn hiển thị và thêm các dấu phân cách theo ý muốn.
Tuy nhiên, lệnh này cũng có một số hạn chế. Bạn không thể sử dụng biểu thức chính quy để chỉ định dấu phân cách hoặc sử dụng nhiều tùy chọn lệnh cut đồng thời. Bài viết này bao gồm các ví dụ thực tế từ cơ bản đến nâng cao về tiện ích này để giúp người mới bắt đầu hiểu rõ về các lệnh thao tác văn bản trên Linux.
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty
