我有 “我爱 Suzi 和结婚”,我想将 “Suzi” 更改为 “Sara”。
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
# do something...
结果必须是这样的:
firstString="I love Sara and Marry"
要用给定的字符串替换第一次出现的模式,请使用${ <em>parameter</em> / <em>pattern</em> / <em>string</em> }
:
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
echo "${firstString/Suzi/$secondString}"
# prints 'I love Sara and Marry'
要替换所有出现的内容,请使用${ <em>parameter</em> // <em>pattern</em> / <em>string</em> }
:
message='The secret code is 12345'
echo "${message//[0-9]/X}"
# prints 'The secret code is XXXXX'
(这在Bash 参考手册的第 3.5.3 节 “Shell 参数扩展” 中进行了介绍 。)
请注意,POSIX 未指定此功能 - 它是 Bash 扩展 - 因此并非所有 Unix Shell 都实现此功能。有关相关的 POSIX 文档,请参见《 Open Group 技术标准基础规范》第 7 期 , Shell&Utilities卷,第 2.6.2 节 “参数扩展” 。
这可以完全通过 bash 字符串操作来完成:
first="I love Suzy and Mary"
second="Sara"
first=${first/Suzy/$second}
那将仅替换第一次出现;要全部替换,请将第一个斜杠加倍:
first="Suzy, Suzy, Suzy"
second="Sara"
first=${first//Suzy/$second}
# first is now "Sara, Sara, Sara"
尝试这个:
sed "s/Suzi/$secondString/g" <<<"$firstString"