Повторить число в строке дважды, используя команду 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"
где /(.../)
больше не нужны.