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?

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.