Lệnh Sed trong Linux - Hướng dẫn sử dụng đơn giản, chi tiết
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.
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.
Nguồn: https://suncloud.vn/lenh-sed-trong-linux
Nhận xét
Đăng nhận xét