Khám phá cách sử dụng lệnh Sed trong Linux qua hướng dẫn đơn giản và chi tiết, cùng với các ví dụ minh họa dễ hiểu trong bài viết ngay sau đây.
Trong quản trị hệ thống và lập trình, việc xử lý và chỉnh sửa văn bản là một công việc thường xuyên và quan trọng. Một trong những công cụ mạnh mẽ và phổ biến nhất để thực hiện nhiệm vụ này trên các hệ thống Unix/Linux là lệnh sed. Bài viết này sẽ giới thiệu chi tiết về lệnh sed, cách cài đặt và sử dụng nó một cách dễ dàng và hiệu quả.
I. Lệnh sed là gì?
Lệnh sed là viết tắt của “stream editor”, là một công cụ dòng lệnh được sử dụng để chỉnh sửa văn bản trực tiếp từ dòng dữ liệu (streams) hoặc từ file. Sed có khả năng thực hiện các thao tác chỉnh sửa văn bản như tìm kiếm, thay thế, chèn, xóa, và nhiều thao tác khác mà không cần mở file trong một trình soạn thảo văn bản.
Lệnh sed xuất hiện từ những năm 1970, nó được phát triển bởi Lee E. McMahon, và đã trở thành một phần quan trọng trong bộ công cụ Unix truyền thống.
>>> Xem thêm: Hướng dẫn chi tiết cách sử dụng lệnh “nc” trong Linux
II. Cơ chế hoạt động của lệnh sed
Sed sẽ xử lý văn bản theo dòng (line-by-line), cho phép người dùng áp dụng các lệnh chỉnh sửa trên từng dòng văn bản. Nó có thể hoạt động trong hai chế độ chính:
- Script mode: Thực thi một tập hợp các lệnh từ file bash-scripts
- Command line mode: Thực thi các lệnh trực tiếp từ dòng lệnh
Mặc dù bản thân sed cực kỳ linh hoạt nhưng nó thường được sử dụng kết hợp với các lệnh Linux khác như awk để xử lý văn bản, grep để tìm kiếm mẫu và cat để hiển thị nội dung file. Cùng với nhau, những công cụ này tạo thành một bộ công cụ mạnh mẽ để xử lý văn bản trong môi trường Linux.
III. Hướng dẫn sử dụng lệnh sed trong Linux
1. Cài đặt sed trên hệ thống
Một số hệ thống đã được tích hợp sẵn lệnh sed trong bộ máy, tuy nhiên một số lại không có. Để biết được máy đã có thể sử dụng lệnh sed hay chưa, chúng ta sử dụng câu lệnh sau để kiểm tra:
sed --version |
Nếu máy chưa có bạn có thể thực hiện cài đặt gói của lệnh sed bằng cách sử dụng một số câu lệnh sau:
# Nếu hệ điều hành của bạn là Ubuntu sudo apt-get install sed # Nếu hệ điều hành của bạn là CentOS sudo yum install sed # Nếu hệ điều hành của bạn là macOS brew install gnu-sed |
2. Cú pháp và các tùy chọn của lệnh sed trong Linux
2.1. Cú pháp cơ bản của lệnh sed trong Linux
Cú pháp tổng quát của lệnh sed:
sed [OPTIONS] ‘scripts’ filename |
Trong đó:
- OPTIONS: là các tùy chọn của lệnh sed
- ‘scripts’: là các lệnh sed
- filename: là file văn bản cần được xử lý
2.2. Các tùy chọn của lệnh sed và ví dụ
Một số tùy chọn phổ biến:
-e script: Chỉ định lệnh hoặc tập hợp các lệnh sed để thực thi. Tùy chọn này có thể sử dụng nhiều lần để thực thi nhiều lệnh.
# Sử dụng 2 lệnh cùng lúc sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt |
-f script-file: Đọc các lệnh từ file script được chỉ định thay vì từ dòng lệnh. Tùy chọn này cũng có thể sử dụng nhiều lần để đọc từ nhiều file script.
# Đọc lệnh từ file script.sed và thực hiện trên file.txt sed -f script.sed file.txt |
-i[SUFFIX]: Chỉnh sửa trực tiếp trên file gốc. Có thể chỉ định thêm một hậu tố để tạo bản sao lưu của file gốc. Ví dụ: -i.bak sẽ tạo file sao lưu với đuôi .bak.
# Thay thế foo = bar trong file.txt, tạo ra 1 file sao lưu sed -i.bak 's/foo/bar/' file.txt |
-n: Không tự động in ra dòng đầu vào. Tùy chọn này thường được dùng kèm với lệnh p (print) để chỉ in ra những dòng thỏa mãn điều kiện.
# Chỉ in ra những dòng được thay đổi sed -n 's/foo/bar/p' file.txt |
Một số tùy chọn khác:
- -r hoặc --regexp-extended: Sử dụng cú pháp biểu thức chính quy mở rộng (Extended Regular Expressions, ERE).
- -s: Xử lý mỗi file đầu vào riêng biệt. Tùy chọn này rất hữu ích khi làm việc với nhiều file.
- -u: Chạy chế độ không đệm (unbuffered). Tùy chọn này chủ yếu được sử dụng trên các hệ thống có vấn đề với đệm đầu vào/đầu ra.
- --help: Hiển thị trợ giúp và thoát. Cung cấp một danh sách các tùy chọn và cú pháp lệnh sed.
- --version: Hiển thị thông tin phiên bản của sed và thoát.
3. Các lệnh cơ bản của lệnh sed trong Linux
3.1. Lệnh thay thế (s)
Cú pháp của lệnh:
sed 's/old-text/new-text' filename |
Trong đó:
- - s: Bắt đầu lệnh
- - old-text: văn bản cũ
- - new-text: văn bản mới
- - filename: tên file được áp dụng
Ví dụ:
# Thay thế old = new trong test.txt sed ‘s/old/new’ test.txt |
Có thể dùng kèm các cờ như:
- `g`: Thay thế tất cả các lần xuất hiện trong một dòng.
- `p`: In dòng chứa chuỗi được thay thế.
- `w file`: Ghi dòng chứa chuỗi được thay thế vào file.
3.2. Lệnh xóa dòng (d)
Cú pháp của lệnh:
sed 'Nd' filename |
Trong đó:
- - N: là vị trí dòng cần xóa
- - d: là lệnh xóa
- - filename: tên file được áp dụng
Ví dụ:
# Xóa dòng thứ 2 trong file test.txt sed ‘2d’ test.txt |
3.3. Lệnh chèn (i) và lệnh thêm (a)
Cú pháp của lệnh chèn:
sed 'Ni\new-line' filename |
Trong đó:
- - N: là vị trí dòng cần chèn
- - i: là lệnh chèn
- - new-line: là nội dungdòng muốn chèn
- - filename: tên file được áp dụng
Ví dụ lệnh chèn:
# Chèn dòng “testi” lên trước dòng thứ 2 của file test.txt sed ‘2i\testi’ test.txt |
Cú pháp của lệnh thêm:
sed 'Na\new-line' filename |
Trong đó:
- - N: là vị trí dòng cần thêm
- - a: là lệnh thêm
- - new-line: là nội dung dòng muốn thêm
- - filename: tên file được áp dụng
Ví dụ lệnh thêm:
# Thêm dòng “testa” vào sau dòng thứ 2 của file test.txt sed ‘2a\testa’ test.txt |
3.4. Lệnh thay thế dòng
Cú pháp của lệnh:
sed 'Nc\new-line' filename |
Trong đó:
- - N: là vị trí dòng cần thay thế
- - c: là lệnh thay thế
- - new-line: Nội dung thay thế
- - filename: tên file được áp dụng
Ví dụ:
# Thay thế dòng thứ 3 bằng “testc” trong file test.txt sed ‘3c\testc’ test.txt |
3.4. Một số lệnh khác
- - p: In dòng
- - y/source/dest/: Chuyển đổi các kí tự từ source sang dest
- - q: Thoát ngay lập tức
- - =: In số dòng hiện tại
- - !: Đảo ngược lệnh, tức là thực hiện lệnh trên những dòng không khớp với biểu thức đã cho
4. Một số ví dụ nâng cao
Chỉnh sửa nhiều dòng cùng một lúc:
# Thay thế old = new trong các dòng từ 3 - 5 trong file test.txt sed '3,5s/old/new/g' test.txt |
Áp dụng các điều kiện với lệnh sed:
# Thay thế old = new trong những dòng chứa “change” trong file test.txt sed '/change/s/old/new/' inputfile |
Kết hợp sed với grep:
# Tìm các dòng chứa "change" và thay thế "old" bằng "new" trong test.txt grep 'change' test.txt| sed 's/old/new/g' |
Tổng kết
Lệnh sed là một phần không thể thiếu trong bộ công cụ của bất kỳ quản trị viên hệ thống hoặc lập trình viên nào làm việc trên môi trường Unix/Linux. Khả năng xử lý mạnh mẽ, cú pháp linh hoạt và tính năng đa dạng của sed làm cho nó trở thành một công cụ quý giá cho mọi tác vụ xử lý và chỉnh sửa văn bản. Bằng cách nắm vững Sed, người dùng có thể đơn giản hóa và tự động hóa nhiều công việc phức tạp, nâng cao hiệu quả công việc và đạt được kết quả chính xác hơn trong thời gian ngắn hơn.