Como posso substituir essa loucura?

Como posso substituir essa loucura?

Como posso substituir uma instância de

id="ogwb"

com

id="ogwb" name="ogwb" value="<?php echo htmlspecialchars($_POST['ogwb']); ?>"

usando sedou alternativa?

Responder1

Um comando adequado:

sed -E 's/^id="([^"]+)"$/& name="\1" value="<?php echo htmlspecialchars($_POST['"'\1'"']); ?>"/'

Observe que isso muda de aspas duplas para aspas simples quando é necessário incorporar aspas simples. Você não pode incorporar aspas simples dentro de aspas simples no Bash. Período.

Mas isso não importa, porque aspas não são stringsterminadoresno Bash, eles são apenas delimitadores entre diferentes estilos de cotação. Então:

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.

Se você não quiser se preocupar com a interação das citações do shell com sed, coloque seu sedcomando em um arquivo e chame-o com sed -f.

Responder2

echo 'id="ogwb"' | sed 's,id=\(.*\),id=\1 name=\1 value="<?php echo htmlspecialchars($_POST[\1]); ?>",'

informação relacionada