2012-02-04 72 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." 
相关问题