Trang chủ » Sử Dụng Sed Để Tìm Kiếm và Thay Thế Văn Bản Trong Linux
Sử Dụng Sed Để Tìm Kiếm và Thay Thế Văn Bản Trong Linux
- 19/04/2023
- LANIT JSC
Sed là gì? Đây là một công cụ dòng lệnh trên hệ điều hành Linux/Unix, được sử dụng để xử lý và thay đổi văn bản trong các tệp tin. Bài viết này sẽ giúp bạn hiểu rõ hơn về Sed, các lệnh cơ bản và cách sử dụng để thao tác với văn bản một cách dễ dàng và hiệu quả
Giới thiệu về Sed
Sed (Stream EDitor) là một công cụ dòng lệnh được sử dụng để thực hiện các hoạt động trên dòng văn bản trong Unix và các hệ điều hành tương tự Unix. Sed cho phép bạn thực hiện các thay đổi trên dòng văn bản, như thay thế, chèn, xóa, cắt và sao chép. Sed thường được sử dụng như là một công cụ xử lý văn bản trong các kịch bản Shell.
Sed hoạt động bằng cách đọc từng dòng văn bản từ đầu vào, thực hiện các hoạt động đã được chỉ định và sau đó xuất ra kết quả. Các hoạt động này được xác định bằng các biểu thức chính quy (regex). Sed có thể hoạt động trực tiếp trên tệp hoặc thông qua đường ống (pipe) trong Unix.
Một số thao tác thường được sử dụng trong Sed bao gồm:
- Thay thế (substitution): Thay thế một chuỗi nào đó bằng một chuỗi khác.
- Chèn (insertion): Chèn một chuỗi vào dòng được chỉ định hoặc vào các dòng được chọn.
- Xóa (deletion): Xóa dòng được chỉ định hoặc các dòng được chọn.
- Cắt (cut): Cắt và hiển thị phần của dòng được chỉ định hoặc các dòng được chọn.
>>> Quan tâm thêm: Dịch vụ Hosting Giá Rẻ – Tốc Độ cao tại LANIT
Cấu trúc lệnh Sed trong Linux / Unix
Lệnh Sed trong Linux / Unix có cấu trúc chung như sau: sed [tùy chọn] [lệnh] [tệp đầu vào]
Trong đó:
- ‘tùy chọn’: là các tùy chọn để tùy chỉnh hoạt động của Sed, ví dụ như -n để tắt chế độ in dòng mặc định hoặc -i để thay đổi trực tiếp tệp đầu vào.
- ‘lệnh’: là các lệnh thực hiện trên tệp đầu vào, bao gồm các lệnh thay thế, chèn, xóa, cắt và sao chép dòng văn bản. Các lệnh được viết bằng các biểu thức chính quy (regex).
- ‘tệp đầu vào’: là tên hoặc đường dẫn tới tệp cần xử lý bởi Sed. Nếu không có tên tệp được chỉ định, Sed sẽ đọc từ đầu vào tiêu chuẩn (stdin).
Ví dụ: Để thay thế chuỗi old_text bằng chuỗi new_text trong tệp filename, sử dụng lệnh:
sed ‘s/old_text/new_text/g’ filename
Cách sử dụng lệnh SED trong Linux / Unix
Dưới đây là một số cách sử dụng Sed phổ biến trên Linux / Unix:
Thay thế chuỗi trong tệp
sed ‘s/old_string/new_string/g’ file.txt > new_file.txt
Lệnh trên sẽ tìm kiếm và thay thế toàn bộ chuỗi ‘old_string’ bằng chuỗi ‘new_string’ trong tệp file.txt và lưu kết quả vào tệp ‘new_file.txt’. Tùy chọn -i có thể được sử dụng để thay đổi trực tiếp trong tệp ‘file.txt’.
Xóa các dòng chứa chuỗi cụ thể
sed ‘/delete_this_string/d’ file.txt > new_file.txt
Lệnh trên sẽ xóa tất cả các dòng chứa chuỗi ‘delete_this_string’ từ tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Chèn dòng vào giữa các dòng
sed ‘3i\new_line’ file.txt > new_file.txt
Lệnh trên sẽ chèn một dòng mới (‘new_line’) vào trước dòng thứ 3 trong tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Hiển thị các dòng cụ thể
sed -n ‘2,4p’ file.txt
Lệnh trên sẽ hiển thị các dòng từ 2 đến 4 trong tệp ‘file.txt’.
Thực hiện nhiều lệnh
sed -e ‘s/old_string/new_string/g’ -e ‘/delete_this_string/d’ file.txt > new_file.txt
Lệnh trên sẽ thực hiện cả hai lệnh trên (thay thế chuỗi và xóa các dòng) trên tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Thay thế theo biểu thức chính quy (regular expression)
sed ‘s/regex/new_string/g’ file.txt > new_file.txt
Lệnh trên sẽ tìm kiếm và thay thế toàn bộ các chuỗi khớp với biểu thức chính quy ‘regex’ bằng chuỗi ‘new_string’ trong tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Sử dụng biến trong lệnh Sed
variable=”new_string”
sed “s/old_string/$variable/g” file.txt > new_file.txt
Lệnh trên sử dụng biến ‘$variable’ để thay thế cho chuỗi ‘new_string’ trong lệnh Sed.
Xóa các dòng trống
sed ‘/^$/d’ file.txt > new_file.txt
Lệnh trên sẽ xóa tất cả các dòng trống (không có ký tự nào) trong tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Xóa các dòng bắt đầu bằng ký tự cụ thể
sed ‘/^delete/d’ file.txt > new_file.txt
Lệnh trên sẽ xóa tất cả các dòng bắt đầu bằng chuỗi delete trong tệp file.txt và lưu kết quả vào tệp new_file.txt.
Đánh số các dòng
sed = file.txt | sed ‘N;s/\n/\t/’ > new_file.txt
Lệnh trên sẽ đánh số cho tất cả các dòng trong tệp ‘file.txt’ và lưu kết quả vào tệp ‘new_file.txt’.
Các tùy chọn và tham số trong Sed
- ‘-n’:
Lệnh Sed mặc định sẽ in ra toàn bộ các dòng đã được xử lý. Tuy nhiên, sử dụng tùy chọn ‘-n’ sẽ ngăn Sed in ra các dòng này. Điều này thường được sử dụng khi chúng ta chỉ muốn in ra các dòng đã được xử lý theo yêu cầu.
- ‘-e’:
Tùy chọn này cho phép sử dụng nhiều lệnh Sed trong một câu lệnh.
Ví dụ: sed -e ‘s/old_string/new_string/g’ -e ‘s/another_old_string/another_new_string/g’ file.txt > new_file.txt
- ‘-i’:
Tùy chọn này cho phép Sed chỉnh sửa trực tiếp vào tệp đầu vào mà không cần tạo ra một tệp mới. sed -i ‘s/old_string/new_string/g’ file.txt
- ‘p’:
Tùy chọn này cho phép in ra kết quả của một lệnh Sed một cách rõ ràng.
sed -n ‘/pattern/p’ file.txt
- ‘d’:
Tùy chọn này cho phép xóa các dòng đã được xử lý.
sed ‘/pattern/d’ file.txt > new_file.txt
- ‘w’:
Tùy chọn này cho phép ghi kết quả của một lệnh Sed vào một tệp mới.
sed -n ‘/pattern/w new_file.txt’ file.txt
- ‘$’:
Tham số này đại diện cho dòng cuối cùng trong tệp văn bản.
sed ‘$d’ file.txt > new_file.txt
- ‘s’:
Lệnh này được sử dụng để thay thế một chuỗi cụ thể bằng chuỗi khác.
sed ‘s/old_string/new_string/g’ file.txt > new_file.txt
Kết Luận
Đây là một số cấu trúc lệnh cơ bản của Sed và cách sử dụng trong Linux/Unix. Hy vọng bài viết này cung cấp cho bạn thêm cách sử dụng Sed để dễ dàng thao tác với văn bản.
Nếu bạn có bất kỳ câu hỏi nào liên quan đến các lệnh Sed, xin hãy để lại ở phần bình luận bên dưới. LANIT sẽ đưa ra câu trả lời sớm nhất cho bạn.
Chúc bạn thành công!