首页 > 解决方案 > Bash - 如何替换某个索引处的字符(包括索引零)

问题描述

我是 Bash 的初学者。我以前用 Python 做了一个 man 程序,并试图用 Bash 做一个类似的程序,但我现在被困住了。我正在尝试用在正确索引处找到的字母替换“秘密”的字符。我还没有在网上找到任何对我有充分帮助的东西。

例子:

word="abcdef"
secret="______"

如果在 word 中的索引处找到猜测,则:

guess="a"
Outcome: a_____
guess="e"
Outcome: a___e_

我非常接近:

echo $secret | sed s/./$guess/$i

但这在索引为 0 时不起作用。

sed: -e expression #1, char 7: number option to `s' command may not be zero

标签: stringbashsed

解决方案


Bash 对于这类程序并不是特别好,但它肯定内置了字符串替换。

也许到目前为止保持正确的猜测$correct并替换所有其他猜测。

echo "${secret//[!$correct]/_}"

参数扩展${secret//pattern/replacement}产生的值$secretwith 每个匹配pattern替换为replacement; 该模式[!abc]匹配任何不是a,b或. 的单个字符c。(在模式前有一个斜杠,只有第一次出现被替换。)为此,$correct不能为空,所以可以"_"在程序开始时将其初始化。

如果您真的想要基于索引的字符串处理,请${variable:start:len}$variable.

这些参数扩展是特定于 Bash 的;POSIXsh支持的操作集要少得多。


推荐阅读