То, что вы говорите, вы хотите сделать, это не то, что вы говорите sed
делать.
Вы хотите вставить число в тег или заменить его, если оно есть. sed
вы пытаетесь сказать, что нужно заменить тег span и его содержимое, если оно есть, или число, значением переменной оболочки.
Вы также используете много сложных, раздражающих и подверженных ошибкам escape-последовательностей, которые просто не нужны.
Вот что вы хотите:
sed -r -i -e 's|<span id="unlockedCount">([0-9]{0,})</span>|<span id="unlockedCount">'"${unlockedCount}"'</span>|g' index.html
Обратите внимание на различия:
- Добавлено
-r
для включения расширенных выражений, без которых ваш шаблон захвата не будет работать.
- Используется
|
вместо /
в качестве разделителя для замены, так что экранирование /
не потребуется.
- Заключите в кавычки выражение
sed
, чтобы не было необходимости убирать вещи из него из оболочки.
- Включен соответствующий тег span в раздел замены, чтобы он не удалялся.
- Чтобы развернуть переменную
unlockedCount
, закройте выражение в одинарных кавычках, а затем снова откройте его.
- Опущено
cat |
, которое здесь было бесполезно.
Я также использовал двойные кавычки вокруг расширения переменной оболочки, потому что это хорошая практика, но если она не содержит пробелов, это не является действительно необходимым.
Строго говоря, мне не нужно было добавлять -r
. Обычный старый sed
будет работать, если вы скажете \([0-9]\{0,\}\)
, но идея здесь состояла в том, чтобы упростить.