2012-02-04 52 views
11

Tôi muốn thay đổi tất cả các từ trong văn bản khớp với một từ nhất định với từ khác trong bourne shell. Ví dụ:Thay thế một từ bằng chữ khác trong bash

hello sara, my name is sara too. 

trở thành:

hello mary, my name is mary too. 

Ai có thể giúp tôi?
Tôi biết rằng grep tìm từ tương tự nhưng tôi muốn thay thế chúng bằng từ khác.

Trả lời

9

cú pháp bash tinh khiết:

before='hello sara , my name is sara too .' 
after=${before//sara/mary} 
echo $after 

HOẶC cú pháp sed:

sed 's/sara/mary/g' <<< $before 
echo $after 

OUTPUT:

hello mary , my name is mary too . 
+1

Chuỗi đầu vào sẽ được đặt tên tốt hơn là 's', để tránh nhầm lẫn trong' $ {s // sara/mary} 'và' 's/sara/mary/g''. – galath

6

Bạn có thể sử dụng sed cho rằng:

$ sed s/sara/mary/g <<< 'hello sara , my name is sara too .' 
hello mary , my name is mary too . 

Hoặc nếu bạn muốn thay đổi một tập tin tại chỗ:

$ cat FILE 
hello sara , my name is sara too . 
$ sed -i s/sara/mary/g FILE 
$ cat FILE 
hello mary , my name is mary too . 
3

Bạn có thể sử dụng sed:

# sed 's/sara/mary/g' FILENAME 

chí đầu ra kết quả. Cấu trúc s /// có nghĩa là tìm kiếm và thay thế bằng các biểu thức chính quy. Chữ 'g' ở cuối có nghĩa là "mọi cá thể" (không chỉ là chữ cái đầu tiên).

Bạn cũng có thể sử dụng perl và chỉnh sửa các tập tin tại chỗ:

# perl -p -i -e 's/sara/mary/g;' FILENAME 
+0

sed cũng có thể làm tại chỗ-sửa đổi. –

+0

Những cái mới hơn, bởi GNU, vâng. –

0

Bạn cần phải sử dụng sed để thay thế các từ

1

Hoặc awk

awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too." 
Các vấn đề liên quan