2016-08-05 23 views
1

Ich versuche, einen Charakter auf einer angepassten Gruppe nursed, ersetzen auf einer angepassten Gruppe

Eingang zu ersetzen:

Foo("test-me"); 

für die folgende Ausgabe der Suche:

Foo(TEST_ME); 

Die unten Befehl fangen Sie den Text zwischen Anführungszeichen und setzen Sie es in Großbuchstaben

sed 's/Foo("\([^"]*\)");/Foo(\U\1);/' 

=>

Foo(TEST-ME); 

fehlt einfach die

s/-/_/g 
+0

Also shou ld die Ausgabe die Anführungszeichen ('Foo (" TEST-ME ")') oder nein? –

+0

Probieren Sie 'sed' s/Foo aus ("\ ([^" -] * \) - \ ([^ "-] * \)");/Foo (\ U \ 1_ \ 2);/'". Oder kann es mehrere '' s geben? –

+0

kein Zitat auf dem Ausgang – trax

Antwort

2

Sie benötigen eine bedingte Schleife eine beliebige Anzahl von Bindestriche zwischen den Klammern zu ersetzen:

sed 's/Foo("\([^"]*\)");/Foo(\U\1);/;:a;s/\(Foo([^)-]*\)-/\1_/;ta;' 

Details:

:a; # define the label "a" 
s/\(Foo([^)-]*\)-/\1_/; # replace the first hyphen 
ta; # if something is replaced, go to label "a"