
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 sed
Befehl 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 sed
alle Zeilen nach dem Vorkommen des regulären Ausdrucks pattern
und ersetzt diesen. Bei der leeren Ersetzung wird das Muster gelöscht, was ja auch gewollt zu sein scheint.
Am Ende p
wird die geänderte Zeile ausgegeben, während die gesamte Standardausgabe durch die -n
Option unterdrückt wird.
Antwort2
Unter GNU grep
beim 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 grep
nicht verfügbar ist, kann dasselbe mit perl
(dem P
in PCRE) erreicht werden:
perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file
Oder wenn die perl
Version zu alt ist, um sie zu unterstützen \K
:
perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file
Antwort3
sed
Ansatz:
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 Verarbeitungs///
: Entfernen Sie das passende Musters/,.*//
: entferne das Komma und alles danach