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.