Sunday, January 19, 2025

Sed trong Linux

-

sed là một trong những tiện ích được sử dụng rộng rãi trong Linux để sửa đổi nội dung của file văn bản. Tên đầy đủ của sed là Stream Editor. Nó được sử dụng để thay thế hoặc xoá các ký tự hoặc chuỗi ký tự trong file văn bản, hoặc thực hiện các thay đổi trên toàn bộ file.

Cú pháp của lệnh sed như sau:

sed [OPTIONS] COMMAND [FILE(s)]

Trong đó:

  • OPTIONS: các tùy chọn bổ sung cho lệnh sed.
  • COMMAND: các lệnh thực hiện trên file văn bản, ví dụ như sửa đổi nội dung, xoá dòng, thêm dòng mới, …
  • FILE(s): file văn bản mà lệnh sed sẽ thực hiện trên đó. Nếu không có file được chỉ định, sed sẽ lấy đầu vào từ bàn phím.

Các lệnh sed thường được sử dụng như sau:

  • s: thay thế các ký tự hoặc chuỗi ký tự trong file văn bản. Ví dụ: sed 's/oldstring/newstring/g' file.txt sẽ thay thế tất cả các chuỗi oldstring trong file.txt bằng chuỗi newstring.
  • d: xoá dòng. Ví dụ: sed '3d' file.txt sẽ xoá dòng thứ 3 trong file.txt.
  • p: in dòng. Ví dụ: sed -n '5p' file.txt sẽ in ra dòng thứ 5 trong file.txt.
  • a: thêm dòng sau dòng đã chỉ định. Ví dụ: sed '/pattern/a text' file.txt sẽ thêm dòng text sau tất cả các dòng có chứa pattern trong file.txt.
  • i: thêm dòng trước dòng đã chỉ định. Ví dụ: sed '/pattern/i text' file.txt sẽ thêm dòng text trước tất cả các dòng có chứa pattern trong file.txt.

Ngoài ra, còn có nhiều lệnh sed khác được sử dụng trong Linux để sửa đổi nội dung của file văn bản.

Ví dụ sử dụng lệnh sed để thay thế một chuỗi trong một tập tin văn bản:

Giả sử ta có một tập tin văn bản có tên là “example.txt” với nội dung như sau:

This is an example text file.
It contains some text that needs to be replaced.

Ta muốn thay thế chuỗi “text” thành “word”. Để thực hiện việc này, ta có thể sử dụng lệnh sed như sau:

sed 's/text/word/g' example.txt > newfile.txt

Trong đó:

  • ‘s/text/word/g’ là biểu thức thay thế. ‘s’ là viết tắt của “substitute”, ‘text’ là chuỗi cần thay thế, ‘word’ là chuỗi mới thay thế cho chuỗi cũ, và ‘g’ là tùy chọn để thay thế tất cả các trường hợp của chuỗi cần thay thế trong tập tin.
  • example.txt là tên tập tin cần thực hiện thay thế.
  • newfile.txt là tùy chọn để đưa kết quả thay thế vào một tập tin mới có tên là “newfile.txt”.

Kết quả sau khi thực hiện lệnh sed sẽ là tập tin “newfile.txt” với nội dung như sau:

This is an example word file.
It contains some word that needs to be replaced.

Như vậy, chuỗi “text” đã được thay thế bằng chuỗi “word” trong tập tin văn bản.

Có một số mẹo khi sử dụng sed trong Linux như sau:

  1. Sử dụng ký tự khác để phân tách các tham số: Thay vì sử dụng ký tự ‘/’ để phân tách các tham số, bạn có thể sử dụng ký tự khác như ‘|’ hoặc ‘#’ để tránh phải escape ký tự ‘/’. Ví dụ: sed 's|pattern|replacement|' file.txt.
  2. Sử dụng tham số -i để chỉnh sửa trực tiếp file đầu vào: Tham số -i cho phép chỉnh sửa trực tiếp file đầu vào thay vì in ra kết quả trên màn hình. Ví dụ: sed -i 's/foo/bar/' file.txt.
  3. Sử dụng tham số -r để sử dụng biểu thức chính quy mở rộng: Tham số -r cho phép sử dụng biểu thức chính quy mở rộng (extended regular expressions) thay vì biểu thức chính quy (basic regular expressions) mặc định. Ví dụ: sed -r 's/([0-9]+)-([0-9]+)/\2-\1/' file.txt.
  4. Sử dụng tham số -n để không in ra dòng đầu tiên của file: Tham số -n cho phép không in ra dòng đầu tiên của file, chỉ in ra các dòng được chỉnh sửa. Ví dụ: sed -n '2,5p' file.txt in ra các dòng từ 2 đến 5 của file.
  5. Sử dụng biến để lưu giá trị được tìm thấy: Bạn có thể sử dụng biến trong sed để lưu giá trị được tìm thấy và sử dụng lại trong các tham số khác. Ví dụ: sed -r 's/([0-9]+)/\1&/' file.txt sẽ thêm giá trị được tìm thấy vào cuối chuỗi.
  6. Sử dụng tùy chọn g để thay thế toàn bộ chuỗi thay vì chỉ thay thế lần đầu tiên: Nếu không sử dụng tùy chọn g, sed chỉ thay thế lần đầu tiên mà pattern được tìm thấy trong mỗi dòng. Với tùy chọn g, sed sẽ thay thế toàn bộ chuỗi. Ví dụ: sed 's/foo/bar/g' file.txt thay thế toàn bộ chuỗi “foo” thành “bar”.
  7. Sử dụng tùy chọn “-e” để thực hiện nhiều lệnh sed trên cùng một file, ví dụ sed -e 's/old/new/g' -e 's/foo/bar/g' file.txt.
  8. Sử dụng các biến để lưu trữ kết quả của các phép xử lý và tái sử dụng chúng, ví dụ sed 's/old/new/g; s/foo/bar/g' file.txt.
  9. Sử dụng lệnh “p” để in ra kết quả sau khi thay thế, ví dụ sed 's/old/new/p' file.txt.
  10. Sử dụng các biểu thức chính quy (regular expressions) phức tạp để tìm kiếm và thay thế các mẫu, ví dụ sed 's/([0-9]{3})-([0-9]{2})-([0-9]{4})/\3-\2-\1/g' file.txt.
Previous article
Next article

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories