NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
22/04/2024
Lượt xem

Hướng dẫn cách sử dụng lệnh sed trong Linux

22/04/2024
10 phút đọc
Lượt xem

Đánh giá

5/5 - (184 bình chọn)

Lệnh sed trong UNIX có thể dùng để thực hiện nhiều thao tác với file như tìm kiếm, thay thế, chèn và xóa nội dung. Bài viết này sẽ hướng dẫn cách sử dụng lệnh sed trong Linux hiệu quả nhất.

Lệnh sed trong Linux là gì?

Sed (Stream Editor) là một công cụ mạnh mẽ trong Linux để xử lý văn bản theo dòng. Sed được sử dụng để tìm kiếm, thay thế, xóa, thêm, trích xuất và thao tác dữ liệu văn bản một cách hiệu quả.

Sed là một công cụ mạnh mẽ trong Linux để xử lý văn bản theo dòng
Sed là một công cụ mạnh mẽ trong Linux để xử lý văn bản theo dòng

Cấu trúc cơ bản của lệnh sed:

sed 'scripte' [tệp_đầu_vào]
  • scripte: Chuỗi lệnh sed để thực hiện thao tác.
  • tệp_đầu_vào: Tệp văn bản mà bạn muốn xử lý. Nếu không được chỉ định, sed sẽ đọc dữ liệu từ đầu vào chuẩn.

Cách sử dụng lệnh sed trong Linux

Sed cho phép thay đổi nội dung file mà không cần mở file. Bên cạnh đó, lệnh sed còn hỗ trợ biểu thức chính quy để so sánh và khớp các mẫu văn bản phức tạp.

Lệnh sed có cú pháp chung như sau:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Giả sử ta có file sau làm input cho các ví dụ ở dưới đây:

$cat > geekfile.txt

Nội dung:

unix is great os. unix is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Thay thế một chuỗi

Đây cũng là mục đích sử dụng phổ biến nhất của lệnh Sed trong Linux. Giả sử ta cần thay từ “unix” trong file thành “linux“:

$sed 's/unix/linux/' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Trong đó, s chỉ định sử dụng thao tác thay thế (substitute), / là ký tự phân cách, unix là mẫu tìm kiếm còn linux là xâu để thay thế. Theo mặc định thì lệnh sed chỉ thay thế mẫu đầu tiên tìm được trong mỗi dòng. Vì vậy dòng đầu tiên chỉ có xâu “unix” đầu tiên là bị thay thế thành “linux“.

Thay thế lần xuất hiện thứ n của một mẫu trong dòng

Nếu muốn thay thế mẫu khớp được thứ nhất, thứ hai,… trong dòng thì ta có thể dùng các flag /1, /2,… tương ứng. Giả sử ta cần thay thế từ “unix” thành “linux” trong dòng, nhưng chỉ thay thế lần xuất hiện thứ hai của xâu này:

$sed 's/unix/linux/2' geekfile.txt

Output:

unix is great os. linux is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.

Thay thế mọi xâu khớp được trong dòng

Để thay thế mọi xâu khớp được trong dòng, ta có thể dùng flag /g (global) trong lệnh sed:

$sed 's/unix/linux/g' geekfile.txt

Output:

linux is great os. linux is opensource. linux is free os. learn operating system. linux linux which one you choose. linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.

Thay thế xâu kể từ lần xuất hiện thứ n trong dòng

Giả sử ta muốn thay thế các xâu khớp được bằng một xâu khác, nhưng chỉ thay thế kể từ một lần xuất hiện nhất định của xâu thì có thê kết hợp các flag /1, /2,… và /g như sau:

$sed 's/unix/linux/3g' geekfile.txt

Lệnh trên có tác dụng thay thế xâu “unix” thành “linux“, kể từ lần xuất hiện từ ba, bốn, năm,… của xâu trong dòng.

Output:

unix is great os. unix is opensource. linux is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.

Đưa ký tự đầu tiên của mỗi từ vào ngoặc

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'

Output:

(W)elcome (T)o (T)he (G)eek (S)tuff

Thay thế xâu ở một dòng nhất định

Ta có thể yêu cầu lệnh sed thay thế một xâu trên một dòng nhất định bằng cách chỉ định số thứ tự của dòng như sau:

$sed '3 s/unix/linux/' geekfile.txt # thay thế trên dòng thứ 3

Output:

unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Nhân bản dòng được thay thế

Flag /p cho phép in ra hai lần dòng vừa được thay thế:

$sed 's/unix/linux/p' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os. linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Chỉ hiện thị các dòng được thay thế

Kết hợp option -n và flag /p giúp ta chỉ in ra những dòng được thay thế theo lệnh sed trong Linux:

$sed -n 's/unix/linux/p' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Ở đây, option -n đã bỏ các dòng bị trùng lặp khi sử dụng flag /p, do đó chỉ in ra những dòng bị thay thế ra terminal. Nếu chỉ dùng option -n thì lệnh sed sẽ không hiển thị gì.

Thay thế xâu trên một khoảng dòng xác định

Giả sử ta cần thay thế các xâu ở dòng 1 đến dòng 3:

$sed '1,3 s/unix/linux/' geekfile.txt

Output:

linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

Hoặc từ dòng 2 đến cuối file (ký tự $ để đánh dấu vị trí dòng cuối cùng của file):

$sed '2,$ s/unix/linux/' geekfile.txt

Output:

unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful

Xóa dòng từ một file xác định

Lệnh sed có thể được dùng để xóa các dòng có trong file mà không cần phải mở file đó lên. Ví dụ:

  • Xóa dòng thứ n trong file, cú pháp:
<br>$ sed 'nd' filename.txt

Ví dụ xóa dòng thứ 5 trong file:

$ sed '5d' filename.txt
  • Xóa dòng cuối cùng của file:
$ sed '$d' filename.txt
  • Xóa các dòng từ vị trí thứ x đến y, cú pháp:
$ sed 'x,yd' filename.txt

Ví dụ xóa từ dòng 3 đến 6 trong file:

$ sed '3,6d' filename.txt
  • Xóa từ dòng thứ n đến cuối file:
$ sed 'nth,$d' filename.txt

Ví dụ xóa từ dòng thứ 12 trở đi:

$ sed '12,$d' filename.txt
  • Xóa dòng có khớp mẫu:
$ sed '/pattern/d' filename.txt

Ví dụ:

$ sed '/abc/d' filename.txt

Một số lệnh sed thường dùng

  • d: Xóa dòng hiện tại.
  • q: Thoát khỏi sed.
  • s/…/…/g: Tìm kiếm và thay thế tất cả sự xuất hiện của mẫu đầu tiên (“…”) bằng mẫu thứ hai (“…”) trong dòng hiện tại.
  • s/…/…/n: Tìm kiếm và thay thế sự xuất hiện đầu tiên của mẫu đầu tiên (“…”) bằng mẫu thứ hai (“…”) trong dòng hiện tại.
  • p: In ra dòng hiện tại.
  • a: Thêm dòng mới sau dòng hiện tại.
  • i: Thêm dòng mới trước dòng hiện tại.
  • N: Append dòng tiếp theo vào dòng hiện tại.

Lời kết

Bài viết này đã liệt kê một số trường hợp sử dụng phổ biến nhất của lệnh sed trong Linux, giúp ta chỉnh sửa, tìm kiếm nội dung mà không cần phải mở file. Nếu có câu hỏi gì về lệnh sed trong Linux thì bạn đọc hãy để lại ở phần comment bên dưới nhé!

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG