Замена 3 или более цифр эквивалентным числом *

Я хочу заменить любую 3 или более цифровую строку в текстовом файле с эквивалентным числом * . Например: abc-1234-45 -> abc – **** – 45

 echo "abc-1234-45" | sed 's/[0-9]\{3,\}/*/' 

Я пробовал это, но он заменяет его только одним *.

Пожалуйста, предложите решение здесь.

2 Solutions collect form web for “Замена 3 или более цифр эквивалентным числом *”

Вы можете использовать perl :

 $ echo "abc-1234-45" | perl -pe 's/(\d{3,})/"*" x length($1)/eg' abc-****-45 

/e perl оценивает правую часть как выражение перед заменой.

GNU awk

 echo 'abc-1234-45' | awk --re-interval -v RS='[[:digit:]]{3,}' '{gsub(/[[:digit:]]/, "*", RT); printf "%s%s", $0, RT}' abc-****-45 

Или, если вы хотите посмотреть на Python

 echo 'abc-1234-45' | python -c 'import re; import sys; print re.sub(r"\d{3,}",\ lambda x: len(x.group())*"*", sys.stdin.readline().strip())' 
  • Использование sed для удаления разделителей цифр, заключенных в кавычки и кавычки из CSV?
  • Обработать столбец с текстом, который имеет пробелы как 1 поле
  • найти команду с помощью квантификатора regex, например {1,2}
  • Как я могу grep две вещи, где есть опция -w?
  • Как использовать If-Else для выполнения определенных действий, если дни недели - это дни?
  • Удалить несколько регулярных выражений из переменной с помощью sed
  • Удалить до первого вхождения, отредактировать эту строку и распечатать оставшиеся строки без изменений
  • Поддерживает ли bash обратные ссылки при расширении параметров?
  • (Mac Terminal) sed для анализа JSON ... что я делаю неправильно?
  • Почему мне нужно избегать символов регулярных выражений в sed для интерпретации символов регулярных выражений?
  • regex заменить текст в XML-файле в узле из командной строки
  • Linux и Unix - лучшая ОС в мире.