sed, regex durch vars ersetzen

2

Ich versuche sed (4.2.2-4 + b1 debian 8 (jessie)) zu verwenden, um Text in mehreren Dateien zu ersetzen.

Um davon auszugehen:

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

Um dies zu bekommen:

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

Der normale reguläre Ausdruck wäre:

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

Sed so zu benutzen scheint aber nicht zu funktionieren

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

Oder:

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

Weiß jemand was ich falsch mache?

Chris
quelle

Antworten:

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

Suchen Sie ein Zeichen, das kein Anführungszeichen ist, gefolgt von der Raute, gefolgt von einem optionalen Leerzeichen, gefolgt von =>, und setzen Sie den Schlüssel in Anführungszeichen.

glenn jackman
quelle
Das hat aus irgendeinem Grund nicht funktioniert.
Chris
hast du das aufgenommen? -r Option für sed?
glenn jackman
Ja. sed -i.bak -r ....
Chris
"Hat nicht funktioniert" ist die schlechteste Beschreibung des Problems. Was tat geschehen?
glenn jackman
Nichts ist passiert. Kein Fehler, lief genauso wie bei einer fehlerhaften Anweisung.
Chris