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ệnhsed
.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ệnhsed
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ỗioldstring
trongfile.txt
bằng chuỗinewstring
.d
: xoá dòng. Ví dụ:sed '3d' file.txt
sẽ xoá dòng thứ 3 trongfile.txt
.p
: in dòng. Ví dụ:sed -n '5p' file.txt
sẽ in ra dòng thứ 5 trongfile.txt
.a
: thêm dòng sau dòng đã chỉ định. Ví dụ:sed '/pattern/a text' file.txt
sẽ thêm dòngtext
sau tất cả các dòng có chứapattern
trongfile.txt
.i
: thêm dòng trước dòng đã chỉ định. Ví dụ:sed '/pattern/i text' file.txt
sẽ thêm dòngtext
trước tất cả các dòng có chứapattern
trongfile.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:
- 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
. - 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
. - 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
. - 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. - 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. - 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ọng
, 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ọng
, 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”. - 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
. - 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
. - Sử dụng lệnh “p” để in ra kết quả sau khi thay thế, ví dụ
sed 's/old/new/p' file.txt.
- 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
.