以下のデータを含むファイルがあります
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: 致命的: 一致しない ( または (: / (/
答え1
これは次のようにして実現できますsed
:
sed -e 's,\\n(.*,,' unset
あるいは、awk
逃げることをたくさんしなければならない
awk -F'\\\\n\\(' '{print $1}' unset
\
の前の両方の正しいエスケープを取得しn
、の特別な解釈から保護する(
答え2
grep と sed を組み合わせて使用して、\n( および )\n の後の目標を達成しました。
grep -o '\\n(.*)\\n' test.txt|sed -e 's/\\n//g'
サンプル出力
(T.a = 1)
(public.cde.newcol = \'013\')