Повторить число в строке дважды, используя команду Sed в Linux Terminal

Допустим, у меня есть hell0 w0rldЯ хочу, чтобы это стало hell00 w0rld, Я старался sed s/0/00/, но это только заменяет 0, это не будет работать для he1lo wor1d(he11lo wor1d)что можно сделать, чтобы он заменял любую первую цифру, а не просто 0? Спасибо!

1 ответ

Так как вы не хотите соответствовать просто 0, но любую цифру, которую вы хотите использовать [0-9], Это означает "любая из цифр 0-9". Вы помещаете это в круглые скобки, чтобы "захватить" его, и в строке замены вы можете добавить обратные ссылки:

$ sed 's/\([0-9]\)/\1\1/' <<< "he1lo wor1d"
he11lo wor1d

Если вы хотите повторить первое число (согласно названию), а не просто цифру, вы добавляете \+ к вашему классу персонажей. Это означает "один или несколько из них":

$ sed 's/\([0-9]\+\)/\1\1/' <<< "he12o wor1d"
he1212o wor1d

Альтернатива обратным ссылкам \1, которые соответствуют группе захвата /(.../), будет использовать &, что означает полное совпадение, т. е.

sed 's/[0-9]/&&/' <<< "he1lo wor1d"

а также

sed 's/[0-9]\+/&&/' <<< "he12lo wor1d"

где /(.../) больше не нужны.

Другие вопросы по тегам