Поиск и замена несколько файлов включая подкаталоги

Я хочу поиск всех случаев:

</form>

В текущем каталоге и его подкаталогах и замене это с:

<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>
</form>

Я попробовал следующий один файл. Файл был touchредактор - в последний раз измененная дата была изменена - но замена не была сделана:

sed -i -re 's/\<\/form\>/\<input type="hidden" name="_token" value="\<cfoutput\>#STOKEN#\<\/cfoutput\>"\>\<\/form\>/gi' ./math.cfm

Что я пропускаю? Существует ли лучшая команда для использования для этого?

0
задан 2 July 2015 в 18:21

1 ответ

\< и \> элементы имеют особое значение в sed regex (как границы слова).

Не делайте вещи трудно при помощи / как разделитель sed и пытающийся разобраться в выходе - выбирают альтернативный разделитель, который не появляется в Вашем тексте, такой как % или |.

i (вставьте) команду, кажется, мне более естественный выбор, чем s команда для этой задачи: Вы могли попробовать

'\%</form>% i\<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>'

Для применения такой команды к подкаталогам рекурсивно можно предоставить команду sed как a -exec или -execdir аргумент find например.

find path/to/dir -type f -name '*.cfm' -execdir sed -i -re '\%</form>% i\<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>' {} +

С другой стороны, Вы могли использовать оболочку globstar функциональность.

2
ответ дан 4 October 2019 в 01:27

Другие вопросы по тегам:

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