2012-02-04 75 views
11

我想更改文本中與Bourne shell中的某個單詞匹配某個單詞的所有單詞。例如:用bash中的另一個詞替換單詞

hello sara, my name is sara too. 

變爲:

hello mary, my name is mary too. 

任何人可以幫助我嗎?
我知道grep找到類似的詞,但我想用其他詞替換它們。

回答

9

純bash的語法:

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

或SED語法:

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

OUTPUT:

hello mary , my name is mary too . 
+1

爲避免混淆'$ {s // sara/mary}'和's/sara/mary/g'',輸入字符串最好被命名爲's'以外的內容。 – galath 2015-12-02 10:22:23

6

您可以使用sed爲:

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

或者,如果你想改變位置的文件:

$ 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

您可以使用SED:

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

將輸出結果。 s ///結構意味着使用正則表達式進行搜索和替換。最後的'g'意味着「每個實例」(而不僅僅是第一個)。

您還可以使用Perl和就地編輯文件:

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

的sed還可以做就地修飾。 – 2012-02-04 15:59:50

+0

GNU的新版本,是的。 – 2012-02-04 16:01:53

0

您需要使用sed代替字詞

1

或者awk

awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too." 
相關問題