2017-04-04 1 views
-2

bekam ich diese Datei:Extrakt 2 Gruppen mit grep oder awk

<DEALER_ID>1234</DEALER_ID><CODE>O_777</CODE> 
<DEALER_ID>7532</DEALER_ID><CODE>O_991</CODE> 

und ich möchte diese Ausgabe:

1234 O_777 
7532 O_991 

Diese so weit ist, wie ich bekommen haben:

cat deal | sed 's/<\/DEALER_NAME>/<\/DEALER_NAME>\n/g' | grep -Po "<DEALER_ID>.*</CODE>" | grep -Po "\d*" 

Nur die erste Spalte

+2

Betrachten Sie einen XML-Parser – anubhava

+1

nicht mit 'awk' für' XML' Verwenden Sie – Inian

+0

Parsen Bitte hören Sie über Kommentare, Wenn Sie in Situationen, in denen Ihr Server keine XML-Parser hat, nicht können, dann ist 'sed -r 's/^ [^>] +> ([^ <]+).*> ([^ <] +). */\ 1 \ 2 /'') –

Antwort

1

Versuchen Sie dies -

awk -F'[<>]' '{print $3, $(NF-2)}' f 
1234 O_777 
7532 O_991 
2

In awk:

$ awk 'gsub(/<[^>]*>/," ")&&$1=$1' file 
1234 O_777 
7532 O_991 

Erklärt:

gsub(/<[^>]*>/," ") # replace <.*> with a space 
&&     # and 
$1=$1    # rebuild the record to remove excess space 
        # implicit output. won't print lines without <.*> 
+0

Es ist üblich, bei der Abstimmung zu kommentieren. –