Awk gensub () не соответствует регулярному выражению - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно изменить несколько файлов, чтобы заменить его часть.Пример содержимого файла показан ниже.

    <title>block-quote-line</title>
    <path d="M11.86,16.55a4.31,4.31,0,0,0-2.11.56,14.44,14.44,0,0,1,4.36-6,1.1,1.1,0,0,0-1.4-1.7c-4,3.25-5.78,7.75-5.78,10.54A5.08,5.08,0,0,0,10,24.58a4.4,4.4,0,0,0,1.88.44,4.24,4.24,0,1,0,0-8.47Z" class="clr-i-outline clr-i-outline-path-1"></path><path d="M23,16.55a4.29,4.29,0,0,0-2.11.56,14.5,14.5,0,0,1,4.35-6,1.1,1.1,0,1,0-1.39-1.7c-4,3.25-5.78,7.75-5.78,10.54a5.08,5.08,0,0,0,3,4.61A4.37,4.37,0,0,0,23,25a4.24,4.24,0,1,0,0-8.47Z" class="clr-i-outline clr-i-outline-path-2"></path>
    <rect x="0" y="0" width="36" height="36" fill-opacity="0"/>
</svg>

Часть файла class="clr-i-outline clr-i-outline-path-[]" необходимо изменить на fill = "#000000".

Регулярное выражение, соответствующее строке, выглядит следующим образом

(class=clr-i-outline clr-i-outline-path-[1-9])

Теперь мне нужно интегрировать это регулярное выражение в команду, которая, однако, не работает.

awk -v regex="(class=\"clr-i-outline clr-i-outline-path-\[1-9\]\")" -v trgt="fill = \"#AB7C94\"" '{ gensub (/regex/, trgt, "g" ) ./test.svg}'

Что я делаю не так?

1 Ответ

0 голосов
/ 18 февраля 2019

Если test.svg - это файл, который вы хотите заменить:

awk -v regex='class="clr-i-outline clr-i-outline-path-[1-9]"' -v trgt='fill = "#AB7C94"' '{ print gensub(regex, trgt, "g" )}' test.svg

Или:

awk -v regex='class="clr-i-outline clr-i-outline-path-[1-9]"' -v trgt='fill = "#AB7C94"' '{ gsub(regex, trgt)}1' test.svg

Оба будут работать в GNU awk.

Вы можете использовать заключенные в кавычки ', чтобы заключить строку, в которой есть двойные кавычки, и вам не нужно экранировать " и [] внутри одинарных кавычек.
Также при обращении к переменной как к регулярному выражению, просто используйтеимя переменной, а не /variable/.

И вы не распечатали вывод, gensub не изменит то, что он заменил, но вернет его, поэтому вы просто распечатаете его.
С другой стороны, gsub изменится, но не вернет то, что изменилось, вы можете распечатать потом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...