Замена 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())' 
  • Может ли кто-нибудь объяснить подстроку bash, соответствующую мне?
  • Использовать sed с обратными ссылками
  • sed backreference: получить каждую строку и добавить ее к концу строки
  • Как избежать синдрома наклонившейся зубочистки в awk?
  • эталонная проблема при использовании sed
  • Что означает это регулярное выражение? <! -. * ->
  • жадные и ленивые регулярные выражения (вопрос понимания)
  • найти команду с помощью квантификатора regex, например {1,2}
  • Выражение скобки не работает в поиске regex
  • Подсчитывать строки с разными символами
  • проверять содержимое файла с помощью регулярных выражений bash
  • Interesting Posts

    sendmail через виртуальную машину

    как сделать большую командную строку, разбитую на две строки, выполняться как одна строка внутри скрипта

    Не удалось понять результаты массива печати для awk?

    Поиск файлов в определенный период и их копирование в другой каталог

    TCSH: Я хочу отобразить вывод команды и перенаправить файл

    Почему Linux настолько хорошо масштабируется для разных аппаратных платформ?

    Вдруг потеряли все кроны

    где я могу найти MIT-MAGIC-COOKIE в пользовательской части?

    Пользователь без пароля – как войти в эту учетную запись из учетной записи, отличной от root

    Можно ли заставить члена группы запускать что-то, что разрешено только судьей, как он сам?

    Многократные скрининг в гольф

    Какова самая последняя методика реализации квот?

    Solaris и internal-sftp

    Как найти причину TCP RST в Linux (Ubuntu Server)

    Вставить строку или строку после последнего экземпляра определенной переменной поиска в цикле

    Linux и Unix - лучшая ОС в мире.