Ersetze ein bestimmtes Wort zwischen Zeichen mit sed?

8

Kann jemand bestimmte Wörter zwischen () ersetzen? Ersetzen Sie zum Beispiel das Wort and durch or zwischen beiden Klammern:

  

(Note = 'C' und Note = 'D' und Note = 'E') und (int_rate & gt; = 10 und int_rate & lt; = 20) und pub_rec & gt; = 0       und Begriff = '36 Monate'

Das wäre:

  

(Note = 'C' oder Note = 'D' oder Note = 'E') und (int_rate & gt; = 10 oder int_rate & lt; = 20) und pub_rec & gt; = 0       und Begriff = '36 Monate'

    
John Richardson 03.06.2013, 14:48
quelle

6 Antworten

1

Wirklich dorky Ansatz:

%Vor%     
Fredrik Pihl 03.06.2013 15:03
quelle
1

Dies könnte für Sie funktionieren (GNU sed):

%Vor%

Arbeite rückwärts durch die Datei und ändere and in (...) in or .

    
potong 03.06.2013 19:05
quelle
1

Mit perl

%Vor%     
jaypal singh 04.06.2013 15:16
quelle
0

Ich dachte noch ein bisschen darüber nach und kam zu dieser Lösung:

%Vor%

Im Grunde, Inhalt in mehreren Zeilen mit Trennzeichen als Klammer aufteilen, verwenden Sie sed auf allen Zeilen mit Klammern, um alle ands in ors umzuwandeln, und dann alle in eine einzelne Zeile zurückzubringen.

    
John Richardson 03.06.2013 18:05
quelle
0

Eine Lösung mit

Inhalt von script.vim

%Vor%

Führen Sie es wie folgt aus:

%Vor%

Dadurch wird die Datei mit dem folgenden Ergebnis aktualisiert.

%Vor%

Erstellt außerdem eine Sicherungsdatei, die das Suffix ~ an den ursprünglichen Dateinamen anhängt.

    
Birei 03.06.2013 21:38
quelle
0

Ich kenne Sed nicht, aber hier ist ein Regexp, der nur and zusammenfasst, gefolgt von einem ) :

%Vor%

Ersetzen Sie die Übereinstimmungen einfach durch or , genau wie diese Demo .

Seitennotiz: Dies überprüft nicht die Syntax der Eingabe, d. h. die Anzahl der Klammern, etc. Wenn Sie dies beabsichtigen, könnten einige existierende Parser Ihren Anforderungen entsprechen.

    
sp00m 04.06.2013 15:41
quelle

Tags und Links