Có rất nhiều cách để làm điều này. Bạn có thể sử dụng awk
, perl
hoặc bash
để thực hiện các hoạt động này là tốt. Nhìn chung, sed
có lẽ là công cụ apropos nhất để thực hiện các loại nhiệm vụ này.
Ví dụ
Nói rằng tôi có dữ liệu mẫu này, trong một tệp data.txt
:
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
ôi
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Perl
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Chỉnh sửa nội tuyến
Các ví dụ trên có thể trực tiếp sửa đổi các tập tin quá. Ví dụ Perl là tầm thường. Đơn giản chỉ cần thêm công -i
tắc.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Đối với awk
nó ít trực tiếp hơn nhưng cũng hiệu quả:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Phương thức này tạo một lớp vỏ con với dấu ngoặc nhọn '{...} `trong đó tệp được chuyển hướng vào nó thông qua điều này:
$ { ... } < data.txt
Khi tệp đã được chuyển hướng vào lớp vỏ phụ, nó sẽ bị xóa và sau đó awk
được chạy ngược lại với nội dung của tệp được đọc vào lớp vỏ phụ STDIN. Nội dung này sau đó được xử lý awk
và viết lại thành cùng tên tệp mà chúng ta vừa xóa, thay thế nó một cách hiệu quả.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. Bên cạnh đó, nhiều công cụ và ngôn ngữ cũng có thể thực hiện thay thế chuỗi văn bản đơn giản. Vì vậy, câu hỏi của bạn là một số rộng.