sed, regex substitui por vars

2

Estou tentando usar o sed (4.2.2-4 + b1 debian 8 (jessie)) para substituir o texto em vários arquivos.

Para passar disso:

$var1 = array(foo=>"bar",bar=>"foo");
$var2 = array( foo=>"bar", bar=>"foo" );
$var1 = array(
    foo=>"bar",
    bar=>"foo"
);

Para conseguir esta:

$var1 = array( "foo" => "bar","bar" => "foo");
$var2 = array( "foo" => "bar", "bar" => "foo" );
$var1 = array(
    "foo" => "bar",
    "bar" => "foo"
);

O regex normal seria:

/(\(|\(\s|,|,\s.+?)([a-z|A-Z].+?)=>/$1"$2" => /g

Usar sed assim não parece estar funcionando

sed -i "s#\((\|(\s\|,\|,\s.+?\)\([a-zA-z].+?\)=>#\1\"\2\" => #g" *.php

Ou:

sed -i "s#\((\|(\s\|,\|,\s.+?\)\([a-z\|A-z].+?\)=>#\1\"\2\" => #g" *.php

Alguém sabe o que estou fazendo de errado?

Chris
fonte

Respostas:

1
sed -r 's/([^"])([[:alpha:]_][[:alnum:]_]*)[[:blank:]]*=>/\1"\2" => /g'

encontre um caractere sem aspas, seguido da tecla hash, seguido de espaço em branco opcional seguido por =>e insira aspas ao redor da chave.

Glenn Jackman
fonte
Isso não funcionou por algum motivo.
Chris
você incluiu a -ropção para sed?
glenn jackman
Sim. sed -i.bak -r ....
Chris
Bem, "não funcionou" é a pior descrição possível do problema. O que aconteceu?
glenn jackman
Nada aconteceu. Sem erro, foi executado exatamente como quando há uma declaração incorreta.
Chris