sed
là một trong những công cụ mạnh mẽ trong Linux giúp chúng ta có thể thực hiện các thao tác với văn bản như tìm kiếm, chỉnh sửa, xóa..
Khác với các text editor thông thường, sed
chấp nhận văn bản đầu vào có thể là nội dung từ một file có trên hệ thống hoặc từ standard input hay stdin. Chính vì vậy sed
còn được gọi là một stream editor.
Trước khi chạy câu lệnh sed
chúng ta sẽ tạo một tập tin với tên là test.txt
trên máy tính với nội dung như sau:
foo 1
sample text
Foo 2
sample text
foO 3
sed
Câu lệnh dưới đây sẽ thực hiện việc tìm kiếm cho foo
và thay thế bởi bar
có trong trong test.txt
$ sed -e "s/foo/bar/g" test.txt
Bạn sẽ thấy terminal hiển thị kết quả:
bar 1
sample text
Foo 2
sample text
foO 3
Trong câu lệnh trên:
-e
dùng để thêm vào biểu thức thực thi bởi sed
"s/foo/bar/g"
là biểu thức regular expression dùng để thực hiện việc thay thế (subtitude) foo
bởi bar
và việc thay thế này được thực hiện cho tất cả các kết quả foo
có trong test.txt
test.txt
là tập tin chứa nội dung văn bảnBạn có thể bỏ qua tùy chọn /g
trong biểu thức truyền vào câu lệnh sed
:
$ sed -e "s/foo/bar/" test.txt
Sử dụng tùy chọn i
trong biểu thức regular expression, nếu bạn muốn tìm kiếm và thay thế theo kiểu không phân biệt in hoa và in thường (nghĩa là cả foo
, Foo
, FoO
... đều sẽ được thay thế bởi bar
:
$ sed -e "s/foo/bar/i" test.txt
Bạn sẽ thấy terminal hiển thị kết quả:
bar 1
sample text
bar 2
sample text
bar 3
Để thực hiện việc thay thế trực tiếp trên nội dung của file (in-place substitution) bạn sử dụng tùy chọn -i
trong câu lệnh:
$ sed -i -e "s/foo/bar/g" test.txt
Câu lệnh trên sẽ thực hiện việc thay thế nội dung của tập tin test.txt
.
Nếu bạn không muốn thay đổi trực tiếp trên file test.txt
bạn có thể thêm vào giá trị cho tùy chọn -i
:
$ sed -i ".back" -e "s/foo/bar/g" test.txt
Câu lệnh trên sẽ lưu kết quả ra tập tin test.txt.back
.
Unpublished comment
Viết câu trả lời