如何在 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\')

相關內容