2010-12-10 22 views
-1

Ich versuche, bestimmte Funktionen mit SED zu ersetzen. Lassen Sie sagen, ich habe einige Funktion mit dem Namen,String-Ersatz mit SED

AAAABBBB()

und ich brauche diese in

CCCC (nBBBB)

% BBBB < zu ändern - dies kann sein jede Länge, aber AAAA, CCCC, n sind feste Länge.

Wie kann ich dies mit SED tun? oder sogar mit einer anderen Methode?

Dank

+2

Ich verstehe nicht, was Sie genau ersetzen möchten. Kannst du ein paar Beispiele geben? –

Antwort

2

Hier ist ein schnell ein:

echo "AAAABBBB()" | sed -e 's/AAAA\(.\+\)()/CCCC(n\1)/' 
CCCC(nBBBB) 

echo "AAAAFF()" | sed -e 's/AAAA\(.\+\)()/CCCC(n\1)/' 
CCCC(nFF) 

Die Idee ist ziemlich einfach: der AAAA-String paßt, dann fängt die B in einer Rückreferenzierung (1 oder mehr von ihnen) . Ersetzen Sie das nun durch ein paar C's und die Backref. Gleiches gilt für den anderen Brief.

Sie sind übrigens mit einigen konkreten Beispielen besser dran. Sonst könnten wir nicht genau richtig für die gewünschte Substitution treffen.

+0

hat gut funktioniert. Es tut mir so leid für mein mieses Beispiel: ( – Todd

0
sed -r 's/^A+([^A]+)\(\)/CCCC(n\1)/' 
+0

sorry, ich vergaß B zu erklären, kann auch einen beliebigen Buchstaben sein .. – Todd

+0

so kann es sein, AAAAFWEF() oder AAAAWGRSFWEF() oder sogar AAAAEGRERGREGREGSADFE() usw. – Todd

+0

Um genauer zu sein, OSA_MD_GetBlahblahblah() muss sein geändert in UISPEC (nBlahblahblah) – Todd

0

Sie haben nicht genug Informationen geben ein sehr selektives Muster zu machen (vorausgesetzt, es gibt Funktionen Sie umbenennen nicht wollen tun), aber wenn Sie alles so umbenennen wollte:

sed -e 's/^\(....\)\(.*\)()/\1(n\2)/' 

That wandelt 4 Zeichen am Anfang der Zeile (AAAA) gefolgt von einer beliebigen Länge BBBB in AAAA (nBBBB) um. Ich bin mir nicht sicher, wo Sie CCCC erwarten würden?