如何在 awk 中使用 \n( 和 )\n 作为分隔符

如何在 awk 中使用 \n( 和 )\n 作为分隔符

我有一个包含以下数据的文件

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"];

有多个这样的条目。

我只需要打印“\n(”之后和“)\n”之前的那些条目。

我尝试过使用 awk 但无法提供分隔符。

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

打印文件的整行

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

打印 awk: 警告: 转义序列\(' treated as plain(' awk: fatal: 不匹配 ( 或 (: / (/

答案1

您可以像这样完成此操作sed

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

或者和awk你一起必须做很多逃避

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

获得对\before的正确转义n并防止对 the 的特殊解释(

答案2

我使用 grep 和 sed 的组合来实现 after \n( 和 before )\n 的目标

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

样本输出

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

相关内容