Kombinieren Sie zwei Sed-Befehle

Kombinieren Sie zwei Sed-Befehle

So kombinieren Sie die folgenden Sed-Befehle in Linux

sed -rn 's/.*MsgFlow="([^"]*)".*/\1/p'  ADVQCC_OUTPUT_BRK1

Und

sed -n 's:.*<ProcessDtm>\(.*\)</ProcessDtm>.*:\1:p' ADVQCC_OUTPUT_BRK1

Danke

Antwort1

Normalerweise kann man sedBefehle einfach wie mehrere sBefehle mit einem eingebetteten Semikolon aneinanderreihen:

sed 's/some/another/;s/stuff/thing/'

In Ihrem Fall verwendet ein Befehlerweiterte reguläre Ausdrücke(ERE), die anderegrundlegende reguläre Ausdrücke, Sie müssen also das eine oder das andere konvertieren:

sed -n 's/.*MsgFlow="\([^"]*\)".*/\1/p;s:.*<ProcessDtm>\(.*\)</ProcessDtm>.*:\1:p' ADVQCC_OUTPUT_BRK1

oder mit ERE:

sed -En 's/.*MsgFlow="([^"]*)".*/\1/p;s:.*<ProcessDtm>(.*)</ProcessDtm>.*:\1:p' ADVQCC_OUTPUT_BRK1

Anmerkung: Ich habe für die Auswahl von ERE -rzu geändert -E, da dies von mehr Versionen von verstanden wird sed.

Antwort2

Ich denke, die nähere Variante der Kombination zweier Befehle wird (POSIX-mäßig) sein:

sed -ne 's/.*MsgFlow=\"\([^"]*\)\".*/\1/p' -ne 's/.*<ProcessDtm>\\\(.*\\\)<\/ProcessDtm>.*/\1/p' ADVQCC_OUTPUT_BRK1

Oder am einfachsten:

sed -e 's/.*MsgFlow=\"\([^"]*\)\".*/\1/' -e 's/.*<ProcessDtm>\\\(.*\\\)<\/ProcessDtm>.*/\1/' ADVQCC_OUTPUT_BRK1

Aber ich brauche ein Eingabebeispiel, um ein genaueres Ergebnis zu erhalten.

verwandte Informationen