
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 sed
Befehle einfach wie mehrere s
Befehle 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 -r
zu 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.