次のデータを含むファイルがあります。
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
print awk: 警告: エスケープシーケンス
\(' treated as plain
(' awk: fatal: 一致しない ( または (: / (/
答え1
次のようにこれを実行できますsed
。
sed -e 's,\\n(.*,,' unset
それともawk
あなたと一緒にたくさんの脱出をしなければなりません。
awk -F'\\\\n\\(' '{print $1}' unset
\
beforeの正しいエスケープを取得し、n
特別な解釈を防ぎます。(
答え2
\n(および以前)の目標を達成するためにgrepとsedの組み合わせを使用します。\n
grep -o '\\n(.*)\\n' test.txt|sed -e 's/\\n//g'
サンプル出力
(T.a = 1)
(public.cde.newcol = \'013\')