Заменить символ только в том случае, если ему предшествует цифра

Предположим, что у меня есть файл, содержащий

abcxd,abcx,6000/600x1 

Мне нужно заменить x на * которого есть число перед ним. Я пытался

 sed 's/[0-9]x/*/g' 

но это неправильно, поскольку ожидаемый результат:

 abcxd,abcx,6000/600*1 

2 Solutions collect form web for “Заменить символ только в том случае, если ему предшествует цифра”

Использовать группы захвата и обратную ссылку

 $ echo 'abcxd,abcx,6000/600x1' | sed 's/\([0-9]\)x/\1*/g' abcxd,abcx,6000/600*1 
  • \([0-9]\) захватить эту цифру, чтобы на нее можно было ссылаться \1
    • См. Раздел « Группы захвата» для более подробного обсуждения этого использования регулярных выражений
  • С ERE синтаксисом будет sed -E 's/([0-9])x/\1*/g'
  • Модификатор g необходим, если необходимо заменить несколько совпадений. Для данного образца он не нужен

С ароматами регулярных выражений, такими как pcre , можно использовать lookarounds

 $ echo 'abcxd,abcx,6000/600x1' | perl -pe 's/(?<=\d)x/*/g' abcxd,abcx,6000/600*1 

Попробуй это:

 $ echo "abcxd,abcx,6000/600x1" |\ sed -E 's/^([az,]*)([0-9\/]*)(x)(.*$)/\1\2*\4/' 
  • Найти строку в одном разделе файла с несколькими разделами
  • Создайте список каждого пользователя, которому принадлежит файл в заданном каталоге, а также количество файлов и каталогов, которыми они владеют.
  • Прокомментируйте оператор if и соответствующее ключевое слово endif
  • Использование sed для замены слов
  • Вставить после второго шаблона в sed
  • Может ли sed сохранить свой вывод в файл?
  • Есть ли способ использовать апострофы в командах sed?
  • Sed Замените числовое содержимое
  • Минимизированный код JSON между двумя шаблонами с помощью регулярных выражений
  • Как читать строки из файла и комбинировать перед сопоставлением шаблона из другого файла?
  • Sed, Awk Multiline log file, число {0-999] идентифицирует отношение
  • Linux и Unix - лучшая ОС в мире.