So verwenden Sie \n (und) \n als Trennzeichen in awk

So verwenden Sie \n (und) \n als Trennzeichen in awk

Ich habe eine Datei, die die folgenden Daten enthält

7[label = "ScanStep: T_b0\n(T.a = 1)\na\nb\nc\nd\ne\ndob\ntimestamp1\nUnc: Integer(8)\nUnc: Integer(8)\nUnc: Varchar(80)\nUnc: Numeric(10,2)\nUnc: Varbinary(80)\nUnc: Date(8)\nUnc: Timestamp(8)", color = "brown", shape = "box"];

7[label = "ScanStep: cde_b1\nBuddies: (cde_b1, cde_b0, cde_b2)\n(public.cde.newcol = \'013\')\nssn\nnewcol\nmasked_ssn\nUnc: Numeric(10,2)\nUnc: Varbinary(80)\nUnc: Date(8)\nUnc: Timestamp(8)", color = "brown", shape = "box"];

Es gibt mehrere solcher Einträge.

Ich muss nur die Einträge drucken, die nach "\n(" und vor ")\n" kommen.

Ich habe es mit awk versucht, konnte aber kein Trennzeichen angeben.

awk -F "\\n\\\\(" '{print $1}' unset

druckt die ganze Zeile der Datei

awk -F "\\n\\(" '{print $1}' unset

druckt awk: Warnung: Escape-Sequenz \(' treated as plain(' awk: fatal: Nicht übereinstimmend ( oder (: / (/

Antwort1

sedSie können dies folgendermaßen erreichen :

sed -e 's,\\n(.*,,' unset

oder mit awkIhnen müssen viel zu entkommen

awk -F'\\\\n\\(' '{print $1}' unset

um das richtige Entkommen sowohl für die \vor der nals auch zum Schutz vor der speziellen Interpretation der(

Antwort2

Ich habe eine Kombination aus grep und sed verwendet, um Ihr Ziel nach \n( und vor )\n zu erreichen

grep -o '\\n(.*)\\n' test.txt|sed -e 's/\\n//g'

Beispielausgabe

(T.a = 1)
(public.cde.newcol = \'013\')

verwandte Informationen