
Как я могу заменить экземпляр
id="ogwb"
с
id="ogwb" name="ogwb" value="<?php echo htmlspecialchars($_POST['ogwb']); ?>"
с использованием sed
или альтернативой?
решение1
Правильная команда:
sed -E 's/^id="([^"]+)"$/& name="\1" value="<?php echo htmlspecialchars($_POST['"'\1'"']); ?>"/'
Обратите внимание, что это переключает двойные кавычки на одинарные, когда необходимо встроить одинарные кавычки. В Bash нельзя встроить одинарные кавычки внутрь одинарных кавычек. Точка.
Но это не имеет значения, потому что кавычки не являются строкой.терминаторыВ Bash они просто разделители между разными стилями цитирования. Итак:
some-command 'This is in a single quoted string'"'"'This is another quoted string, but is part of the same argument to some-command'
^^^
This single quote is inside of double quotes.
Если вы не хотите беспокоиться о том, как кавычки оболочки взаимодействуют с sed
, поместите свою sed
команду в файл и вызывайте ее с помощью sed -f
.
решение2
echo 'id="ogwb"' | sed 's,id=\(.*\),id=\1 name=\1 value="<?php echo htmlspecialchars($_POST[\1]); ?>",'