Я пытаюсь написать сценарий sh, который получает строку в качестве входных данных, извлекает определенную подстроку и добавляет ее после указанного выражения к входной строке. Я много пробовал с sed -i'N ... но ничего не работает.

Это пример входной строки:

<img src="images/Button-7.jpg" width="251" height="129" border="0" alt=""></a></td>

Вот что я пытаюсь получить в качестве вывода:

<img src="images/Button-7.jpg" name="Button-7" width="251" height="129" border="0" alt=""></a></td>

Следующие работы. Но я должен объявить каждую кнопку вручную.

VarA='Button-7.jpg'
VarB='Button-7.jpg" name="Button-7'

sed "s/${VarA}/${VarB}/g" index.html > temp.html
mv temp.html index.html

1 ответ1

2

Мне кажется, что вам нужно использовать групповой захват и обратные ссылки, чтобы это работало хорошо. Немного поиграв с этими концепциями, я придумал следующее, которое хорошо сработало, как я понимаю, в вашем случае использования:

sed 's#src="images/\(.*\).jpg"#& name="\1"#'

Интересные вещи здесь:

  1. Использование # в качестве разделителя вместо обычного / . Это облегчает рассуждения, поскольку не требует удаления косых черт в шаблоне.
  2. Захват входных данных в группе с использованием (экранированных) скобок.
  3. Повторное использование всего совпадения с & (подсказка шляпы: G-man).
  4. Обратные ссылки на захваченную группу в тексте замены (\1).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .