有效地替换纯 Bash 中出现的所有子串
Efficiently replace all substring appearances in pure Bash
我想使用纯 Bash(没有 awk、perl 或 sed)替换字符串中的 所有 个子字符串。
这一行:
string=${string/$oldValue/$newValue}
仅替换第一次 $oldValue
出现。
这就是我按以下方式进行操作的原因:
while [[ $string == *"$oldValue"* ]]; do
string=${string/$oldValue/$newValue}
done
但我不喜欢这种 "ugly"(=低效)方法。
有更好的方法吗? (可能是第一行代码的通用形式)
添加一个额外的 /
以将所有 $oldValue
替换为 $newValue
:
string="${string//$oldValue/$newValue}"
试试这样的东西:
export str="Hello World Hello"
export oldValue="Hello"
export newValue="Hi"
echo ${str//$oldValue/$newValue}
Hi World Hi
我想使用纯 Bash(没有 awk、perl 或 sed)替换字符串中的 所有 个子字符串。
这一行:
string=${string/$oldValue/$newValue}
仅替换第一次 $oldValue
出现。
这就是我按以下方式进行操作的原因:
while [[ $string == *"$oldValue"* ]]; do
string=${string/$oldValue/$newValue}
done
但我不喜欢这种 "ugly"(=低效)方法。
有更好的方法吗? (可能是第一行代码的通用形式)
添加一个额外的 /
以将所有 $oldValue
替换为 $newValue
:
string="${string//$oldValue/$newValue}"
试试这样的东西:
export str="Hello World Hello"
export oldValue="Hello"
export newValue="Hi"
echo ${str//$oldValue/$newValue}
Hi World Hi