2017-11-24 10 views
-1

Ich habe bereits gesucht, aber ich habe nichts gefunden für meinen Zweck geeignet.Wie zu extrahieren Muster, die mit bestimmten Wort beginnt und endet und enthält kein bestimmtes Wort

Das ist mein Muster der Daten:

query=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxbacteriaxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

query=yyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 

query=zzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
zzzzzzzzzzzzzbacteriazzzzzzzzzzzzzz 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
zbacteriazzzzzzzzzzzzzzzzzzzzzzzzzz 
@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 

. 
. 
. 

Das Muster, das ich greifen müssen, ist

query=yyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
@ 

oder

query=yyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 
@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 

Ich weiß, dass sed -n '/Query=/,/@/p' dieses Muster greifen sollte, aber wie kann ich das Muster mit dem Wort bacteria innen ausschließen?

edit: Es tut mir so leid, Sie mit meiner Frage zu verwechseln. Ich habe dir ein neues Beispiel gegeben.

edit2: Ich habe das Muster bearbeitet, das ich wieder brauche. schrecklich leid.

Das funktioniert sed '/query/!d;{:a;N;/@/!ba;/bacteria/d;s/@.*/@/}' infile Dank an ctac_

+1

Es ist nicht klar, was dein Problem ist. Bitte posten Sie einige vereinfachte Muster, die Sie abgleichen möchten. – 1010

+1

Wie kann das zu entnehmende Muster etwas enthalten, das offensichtlich nicht in den Eingabedaten enthalten ist? Oder vielleicht verstehe ich die Bedeutung der beiden Daten nicht. –

+2

Bitte verbessern Sie Ihre Frage. Es ist nicht klar, was du willst. Es wäre hilfreich einige Beispiele zu – chgsilva

Antwort

0

Dies könnte für Sie arbeiten (GNU sed):

sed -n '/query/{:a;N;/@/!ba;/bacteria/!p}' file 

Schalten Sie seds grep artige Natur mit -n. Suchen Sie query und hängen Sie dann weitere Zeilen an, bis eine Zeile @ enthält. Suchen Sie diese Zeilen nach bacteria und wenn nicht gefunden, drucken Sie sie.

Diese Lösung ist eine mehrzeilige Lösung, bei der immer zwei oder mehr Zeilen vorhanden sind. Für eine Lösung, die ein oder mehrere enthalten, verwenden:

sed -n '/query/{:a;/@/!{N;ba};/bacteria/!p}' file 
+0

Ich habe es versucht, aber "Bakterien" ist immer noch in dem Ergebnis vorhanden. Ich muss Muster ablehnen, die 'Bakterien' enthalten. Könnten Sie mir einen anderen Vorschlag geben? Schätze deine Hilfe. –

+0

@ChooseelBunsuwansakul Hoppla! Siehe Bearbeiten. – potong

0

Sie können versuchen, diese

sed
sed '/^query/!d;:A;N;/\n$/!{$!bA};h;s/bacteria//;tB;x;b;:B;d' infile 
+0

ahhh Es ist wieder meine Schuld. Ich war in Eile, ohne zu überprüfen, zu bearbeiten. Das letzte Wort in meinem erwarteten Ergebnis in jedem Muster sollte bei "@" enden oder bei der Zeile, die "@" enthält, ist in Ordnung. Ich bin dankbar für Ihre Hilfe. –

+0

@ChooseelBunsuwansakul Sie müssen Ihre Frage aktualisieren –

+0

ja, danke. –

Verwandte Themen