2017-12-21 8 views
0

ich in einer Datei die folgende Zeichenfolge haben „*?“ „+?“:Ersetzen durch „*“, aber nicht mit „* +“

?*TEST?* 
?+ 

Jetzt möchte ich die ?* mit einem Sternchen ersetzt werden *. Die Datei sollte so nach dem Austausch aussehen:

Ich testete ein paar Möglichkeiten, kann aber nicht die Antwort finden. Das Problem ist, dass jeder Befehl sed auch entweder ?* durch ** oder nichts ersetzt.

+0

Was haben Sie versucht? Es scheint, dass 'sed -e '/ TEST/{s /? \ */*? /; s/\ *? /? * /; } '' tut was du willst, aber du hast wirklich nicht genug Details gegeben. –

+2

Sie sagen, Sie möchten '? *' Durch '*' ersetzen, aber Ihr Beispiel ersetzt '*?' Durch '? *'. Welche willst du? –

+0

Können Sie die Ausgabe nach dem Ersetzen klären? – Allan

Antwort

0

Einer von diesen sollte übereinstimmen. In jedem Fall bleibt ?+ intakt.

$ echo "$a" 
*?TEST?* 
?+ 
*?TEST?* 
?+ 
$ echo "$a" |sed 's/[?][*]/*/g' 
*?TEST* 
?+ 
*?TEST* 
?+ 
$ echo "$a" |sed -E 's/([*])([?])/\2\1/g' 
?*TEST?* 
?+ 
?*TEST?* 
?+ 
$ echo "$a" |sed 's/[?][*]/***???/g' 
*?TEST***??? 
?+ 
*?TEST***??? 
?+