Wertteil eines bestimmten Wortes in AIX abrufen

Wertteil eines bestimmten Wortes in AIX abrufen

möchte nach Zeichenfolge suchen und brauche einen Teil der Zeichenfolge

datei.txt:

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKADSRATIO

während Sie den folgenden sedBefehl verwenden, um zusätzlichen Wert zu erhalten

Ausgabe:

bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt

**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,

Ich brauche nurTEMP_ESM.EMPASGMTAMPTMPRTRSE

Antwort1

sed -n 's/.*$$ENV$$_//p' example.txt

Der Befehl s/pattern/replacement/durchsucht sedalle Zeilen nach dem Vorkommen des regulären Ausdrucks patternund ersetzt diesen. Bei der leeren Ersetzung wird das Muster gelöscht, was ja auch gewollt zu sein scheint.

Am Ende pwird die geänderte Zeile ausgegeben, während die gesamte Standardausgabe durch die -nOption unterdrückt wird.

Antwort2

Unter GNU grepbeim Erstellen mit (neuer) PCRE-Unterstützung (wie es bei GNU- und BSD-Systemen üblich ist):

grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file

würde alle Zeichenfolgen außer Leerzeichen und Kommas extrahieren, die auf jedes Vorkommen von folgen $$ENV$$_.

Wenn GNU grepnicht verfügbar ist, kann dasselbe mit perl(dem Pin PCRE) erreicht werden:

perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file

Oder wenn die perlVersion zu alt ist, um sie zu unterstützen \K:

perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file

Antwort3

sedAnsatz:

sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
  • \([^[:space:],]*\)- die 1. erfasste Gruppe enthält Zeichen außer Leerzeichen [:space:]und Kommas,

Die Ausgabe:

TEMP_ESM.EMPASGMTAMPTMPRTRSE

Antwort4

sed '/.*$$ENV$$_/!d;s///;s/,.*//'
  • /.*$$ENV$$_/!d: Wenn die Zeile nicht enthält $$ENV$$_, keine Ausgabe, keine weitere Verarbeitung
  • s///: Entfernen Sie das passende Muster
  • s/,.*//: entferne das Komma und alles danach

verwandte Informationen