2016-04-20 32 views
-1
<testcase classname='tc1' name='tc1' time='78.455094'/> 
    <testcase classname='tc2' name='tc2' time='78.549320'> 
    <failure type='fail-verdict'> 
     error message 
    </failure> 
    </testcase> 
    <testcase classname='tc3' name='tc_3' time='78.444719'/> 

, wie 3-rd time in Testcase Tag-Attribut zu ersetzen, um Attribut status (Status = „bestanden“ oder „Fehler“ auf Basis von Testfall, zum Beispiel: TC1, TC3 - pass, tc2- fehlgeschlagen). Ich versuchte sed: sed -i 's/time=\'[0-9]+\.[0-9]+'/status="pass"/g' file.txt erstens ohne jede Logik .. aber es funktioniert nicht.ersetzen ein Attribut in einer anderen mit SED oder awk

+3

Wie viele Male b vorgeschlagen Bevor Sie mit SO fortfahren, sollten Sie überdenken, ob Regex das richtige Werkzeug ist, um XML zu manipulieren. – andlrc

+0

Bearbeiten Sie Ihre Frage, um die erwartete Ausgabe für diese Eingabe anzuzeigen. –

+0

nicht aktuelle Frage jetzt. Ich habe es bereits mit der Hilfe in Antwort unter – ascentman

Antwort

1

Sie benötigen die -E Option (und -r für Gnu sed) ERE zu verwenden (+ und mehr) oder Sie sollten [0-9][0-9]*

Sie können nicht Hochkomma in einfache Anführungszeichen entkommen, müssen Sie folgendes tun:

% echo 'hello'\'' world' 
hello' world 

auf Ihren Befehl angewendet:

sed -i 's/time='\''[0-9][0-9]*\.[0-9][0-9]*'\''/status="pass"/g' file.txt 
+0

Danke gemacht. Es ändert sich direkt den ersten Teil meiner Aufgabe. – ascentman

+0

die eine Sache bleibt hier: Wie kann ich die vorherige Zeile der Datei ändern, wenn in der nächsten Zeile, die ich gefunden habe tag? Ist es möglich mit sed oder ich sollte grep oder awk verwenden? – ascentman

+0

@Wlodek Wenn Sie gnu sed verwenden, können Sie den Modifizierer '-z' verwenden, der die ganze Datei in eine Zeile" schlüpft "und Sie können dann auf' \ n' für Zeilenumbrüche anpassen. Aber wie gesagt in Regex ist nicht geeignet, XML zu analysieren/zu modifizieren – andlrc

Verwandte Themen