如何使用 sed 用特殊字符替换文本

如何使用 sed 用特殊字符替换文本

我目前有一个脚本,可以生成随机单词来创建密码。我通过选择脚本并让它知道我想要多少个单词来运行它。例如。./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/ /!/' 

相关内容