Назад | Перейти на главную страницу

Как использовать sed для замены текста специальными символами

В настоящее время у меня есть сценарий, который генерирует случайные слова для создания паролей. Я запускаю это, выбирая сценарий и сообщая ему, сколько слов я хочу. ./generate_passwords.sh 5. Это создает пять сильных слов.

Это то, с чем у меня проблемы. Я хочу передать это в sed, который должен взять пробелы между этими словами и заменить их случайными специальными символами. Есть ли способ сделать это?

например ./generate_passwords.sh 5 | sed 's/ //g' (Это удаляет все пробелы и ничего не вставляет.)

Это должен быть желаемый результат: word#word*word!

Вы можете реализовать следующую логику:

  • Определите строковые переменные 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 обработать.

sed 's / // g' удаляет все пробелы и ничего не вставляет, как вы пишете :)

sed 's / / # / g' заменяет все пробелы на dies (#).

Итак, вам нужно

 | sed 's/ /\#/'  | sed 's/ /*/'  | sed 's/ /!/'