【发布时间】:2012-02-26 20:47:56
【问题描述】:
我想更改文本中与 bourne shell 中的某个单词匹配的所有单词。例如:
hello sara, my name is sara too.
变成:
hello mary, my name is mary too.
谁能帮帮我?
我知道 grep 会找到相似的词,但我想用其他词替换它们。
【问题讨论】:
我想更改文本中与 bourne shell 中的某个单词匹配的所有单词。例如:
hello sara, my name is sara too.
变成:
hello mary, my name is mary too.
谁能帮帮我?
我知道 grep 会找到相似的词,但我想用其他词替换它们。
【问题讨论】:
纯 bash 方式:
before='hello sara , my name is sara too .'
after="${before//sara/mary}"
echo "$after"
或者使用 sed:
after=$(sed 's/sara/mary/g' <<< "$before")
echo "$after"
输出:
hello mary , my name is mary too .
【讨论】:
s 以外的其他名称,以避免${s//sara/mary} 和's/sara/mary/g' 混淆。
after=$(sed 's/sara/mary/g' <<< "$before")
您可以为此使用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 .
【讨论】:
你可以使用 sed:
# sed 's/sara/mary/g' FILENAME
将输出结果。 s/// 构造意味着使用正则表达式进行搜索和替换。末尾的“g”表示“每个实例”(不仅仅是第一个)。
您也可以使用 perl 并就地编辑文件:
# perl -p -i -e 's/sara/mary/g;' FILENAME
【讨论】:
或awk
awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too."
【讨论】: