我目前有一个脚本,可以生成随机单词来创建密码。我通过选择脚本并让它知道我想要多少个单词来运行它。例如。./generate_passwords.sh 5
这会创建五个强词。
这是我遇到的问题。我想将其导入 sed,它会取出这些单词之间的空格并将其替换为随机特殊字符。有办法吗?
例如./generate_passwords.sh 5 | sed 's/ //g'
(这将删除所有空格并且不插入任何内容。)
这应该是期望的结果:word#word*word!
答案1
您可以实现以下逻辑:
- 定义一个字符串变量,
symbols
其中包含要随机选取的符号 - 只要字符串包含空格就循环
- 使用
((RANDOM % ${#symbols}))
选择一个随机索引 - 用随机选取索引处的符号替换空格
像这样:
s=$(./generate_passwords.sh 5)
symbols='#*!'
while [[ $s == *\ * ]]; do
((index = RANDOM % ${#symbols}))
s=${s/ /${symbols:index:1}}
done
echo "$s"
我使用参数扩展(${s/.../...}
)代替sed
。由于这是 Bash 的原生功能,因此它比重复运行进程要快得多sed
。
答案2
sed's/ //g'删除所有空格并且不插入任何内容,正如您所写:)
sed 's/ /#/g' 将所有空格替换为符号 (#)。
所以你需要
| sed 's/ /\#/' | sed 's/ /*/' | sed 's/ /!/'