string - 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
解决方案
Bash 对于这类程序并不是特别好,但它肯定内置了字符串替换。
也许到目前为止保持正确的猜测$correct
并替换所有其他猜测。
echo "${secret//[!$correct]/_}"
参数扩展${secret//pattern/replacement}
产生的值$secret
with 每个匹配pattern
替换为replacement
; 该模式[!abc]
匹配任何不是a
,b
或. 的单个字符c
。(在模式前有一个斜杠,只有第一次出现被替换。)为此,$correct
不能为空,所以可以"_"
在程序开始时将其初始化。
如果您真的想要基于索引的字符串处理,请${variable:start:len}
从$variable
.
这些参数扩展是特定于 Bash 的;POSIXsh
支持的操作集要少得多。
推荐阅读
- excel - 检索 PPT 对象链接的名称 - VBA
- python - Python 列表分配 - 概念问题
- java - 选择名字和多查询时仅插入 ID
- parallel-processing - 裸机(==无操作系统)系统是否有任何 MCAPI API 实现?
- powershell - 从 SQL 服务器获取价值并删除相关文件夹
- javascript - 使用 Angular Material DataTable 时,Angular 组件的 ngOnInit 内的 SetTimeOut 函数
- angular - 为什么这适用于 HTTP 而不是 HTTPClient?
- accord.net - Accord .NET 中的 BagOfVisualWords
- xpages - 如何向 XPages 控件添加不带标签的属性?
- javascript - Jmeter - WebDriver 采样器