У меня есть файл, который содержит следующие данные
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: предупреждение: escape-последовательность
\(' 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\')