用bash替换另一个单词

rez*_*eza 13 linux bash terminal sh

我想更改文本中与某个单词匹配的所有单词与bourne shell中的另一个单词.例如:

hello sara, my name is sara too.
Run Code Online (Sandbox Code Playgroud)

变为:

hello mary, my name is mary too.
Run Code Online (Sandbox Code Playgroud)

有谁能够帮我?
我知道grep找到类似的单词,但我想用其他单词替换它们.

anu*_*ava 14

纯粹的bash方式:

before='hello sara , my name is sara too .'
after="${before//sara/mary}"
echo "$after"
Run Code Online (Sandbox Code Playgroud)

或使用sed:

after=$(sed 's/sara/mary/g' <<< "$before")
echo "$after"
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

hello mary , my name is mary too .
Run Code Online (Sandbox Code Playgroud)


Nik*_* B. 8

您可以使用sed:

$ sed s/sara/mary/g <<< 'hello sara , my name is sara too .'
hello mary , my name is mary too .
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要更改文件:

$ 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 .
Run Code Online (Sandbox Code Playgroud)