Использование sed для поиска переменной и ее копирование с вставкой текста в ту же строку

Что заставляет вас думать, что $@будет хранить что-либо после того, как вы используете readдля чтения в cur? Поскольку вы снова читаете его в цикле, результат зависит от того, с какими аргументами вы запускаете этот скрипт, поскольку это то, что означает $@.

2
20.11.2020, 11:54
1 ответ

Если вы можете быть уверены, что строка i )всегда будет заключена в двойные кавычки и никогда не будет содержать ", а ii )всегда будет находиться только в одной строке, то это тривиально:

$ sed -E 's/title=("[^"]*")/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

Хитрость заключается в том, чтобы искать title=", за которым следует 0 или более не-"до следующего "и «захватывать» это (, это то, что скобки вокруг ("[^"]*")делают ), поэтому мы можем затем ссылайтесь на него как \1. В sedсимвол &означает «все, что было сопоставлено». Итак, здесь мы заменяем title="foo"самим собой, а затем alt="foo".

Если у вас есть версия sed, которая не поддерживает -E, вы можете использовать ее вместо:

$ sed 's/title=\("[^"]*"\)/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">
6
18.03.2021, 22:48

Теги

Похожие вопросы