Я хочу поиск всех случаев:
</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
Что я пропускаю? Существует ли лучшая команда для использования для этого?
\<
и \>
элементы имеют особое значение в 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
функциональность.