2017-07-12 3 views
-1

Die Eingabe Ich habe mehrere Strings ersetzen ist:Wie mit dem gleichen Muster ab der gleichen Linie

blabla 0/1: 0,1,0: 1 1/1: 0,0,1.000 : 2 0/0: 1,0,0: 0 1/0: 0,0.943,0.057: 1.057 blabla

Der Ausgang ich will, ist:

blabla RA AA RR blabla RA

Jeder Eintrag/String wird durch Tabulator getrennt. Und alle Einträge/Strings sind in derselben Zeile.
Ich zeige oben nur vier Einträge als Beispiel, es gibt Hunderte anderer Einträge dort mit ähnlichen Mustern, die ich suche. Das heißt jeder String beginnt mit 0/1, 1/0, 1/0 oder 1/1.

ich die Zeichenfolge beginnend mit 0/1 oder 1/0-RA ersetzen möchten, starten die Zeichenfolge mit 0/0-RR und die Zeichenfolge beginnend mit 1/1-AA.

Der Code, den ich jetzt bin mit ist

echo blabla 0/1:0,1,0:1 1/1:0,0,1.000:2 0/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -e "s/0\/0/RR/g" -e "s/0\/1/RA/g" -e "s/1\/0/RA/g" -e "s/1\/1/AA/g" 

jedoch der Ausgang

blabla RA:0,1,0:1 AA:0,0,1.000:2 RR:1,0,0:0 RA:0,0.943,0.057:1.057 blabla 

Ich habe auch versucht den folgenden Code

echo blabla 0/1:0,1,0:1 1/1:0,0,1.000:20/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -e "s/0\/0:.*\\t/RR\\t/g" -e "s/0\/1:.*:\\t/RA\\t/g" -e "s/1\/0:.*\\t/RA\\t/g" -e "s/1\/1:.*\\t/AA\\t/g" 

Es scheint gar nicht funktioniert .

+1

Oops ersetzen können, vergessen Sie Ihren Code zu schreiben. StackOverflow hilft Leuten, ihren Code zu reparieren. Es ist kein kostenloser Kodierungsdienst. Jeder Code ist besser als gar kein Code. Bitte lesen Sie http://stackoverflow.com/help/how-to-ask, http://stackoverflow.com/help/dont-ask, http://stackoverflow.com/help/mcve und nehmen Sie die [Tour] (http://stackoverflow.com/tour), bevor Sie hier weitere Fragen stellen. Viel Glück. – shellter

+0

Sie sagen, Sie wollen '0/1' oder' 1/0' durch 'RA' ersetzen, aber es scheint, dass Sie' 0/1: 0,1,0: 1' durch 'RA' ersetzt haben. Wollen Sie sagen, dass Sie eine beliebige Zeichenfolge, die aus Nicht-Leerzeichen besteht, die mit '0/1' oder' 1/0' beginnen, durch 'RA' ersetzen wollen, oder nur an Zeichenfolgen interessiert sind, die zu 0/1 passen? : 01,] * oder '1/0 [: 01,] *'? Was ist wenn 'blabla'' 0/1text: 0: 1' ist? Was wirst du mit '2/1: 0,1' machen? Die Frage ist schlecht spezifiziert. –

+0

Ich habe meinen Code dort eingefügt, Entschuldigung für das Missverständnis. Ich möchte, dass eine beliebige Zeichenfolge, die aus Nicht-Leerzeichen besteht, die mit 0/1 oder 1/0 beginnen, durch RA ersetzt wird, mit 0/0 beginnt, durch RR ersetzt wird, beginnt mit 1/1, um durch AA ersetzt zu werden. Alle Strings beginnen mit 0/1, 1/0, 0/0 oder 1/1. @ WilliamPursell – fsns

Antwort

0

Was Sie suchen ist:

echo blabla 0/1:0,1,0:1 1/1:0,0,1.000:2 0/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -E "s/0\/1[^ \t]+/RA/g; s/1\/0[^ \t]+/RA/g; s/0\/0[^ \t]+/RR/g; s/1\/1[^ \t]+/AA/g" 

Welche ergibt:

blabla RA AA RR RA blabla

Erläuterung:

Fokus Let auf einen einzigen Ersatz: s/0\/1[^ \t]+/RA/g

Dies ersetzt 0\1anyth1ngexceptwhitespaces durch RA.

Wiederholen Sie 3 mal für die anderen 3 Muster.

Für neuere Versionen von sed Sie "<space>\t" mit "\s"

+0

Vielen Dank! Dies funktioniert, wenn jeder Eintrag/String durch Leerzeichen getrennt ist. Es scheint jedoch nicht zu funktionieren, wenn jeder Eintrag/String durch Tabulator getrennt ist. Die Ausgabe, die ich bekomme, ist blabla RA, wenn sie durch Tab getrennt sind. @Jedi – fsns

+0

Das funktioniert! Da ich den Code mit macOS Sierra ausführe, habe ich '\ t' durch '$ {printf' \ t '}' ersetzt. Danke @ Jedi. – fsns

+0

@fsns In deinem Fall würde ich '[^ [: space:]]' anstelle von '[^ \ t]' versuchen. – Jedi

Verwandte Themen