Lệnh Sed trong Linux - Hướng dẫn sử dụng đơn giản, chi tiết

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ả.

Hình 1. Lệnh sed trong Linux

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.

Hình 2. Lệnh sed là gì?

Lệnh sed xuất hiện từ những năm 1970, nó được phát triển bởiLee 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
Hình 3. Lệnh sed được sử dụng trong bash-scripts

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.baksẽ 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ệnhp(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:

  • -rhoặ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ữngSed, 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.