0
我試圖導入一個非常大的數據庫,它似乎有一些引號不能很好地轉義。我已經嘗試過使用基本的正則表達式規則來創建一個bash腳本,但總是有例外,即使設法逃脫其中的大部分,我也無法修復它們。使用正則表達式在SQL Server轉儲中轉義引號
所以在SQL Server中的基本語法INSERT是這種形式的:
INSERT INTO Production.UnitMeasure
VALUES (N'FT2', N'Square Feet ', '20080923'),
(N'Y', N'Yards', '20080923'),
(N'Y3', N'Cubic Yards', '20080923');
所以在這裏它是正確的,是沒有問題的。但對於這一個:
INSERT INTO Production.UnitMeasure
VALUES (N'FT2', N'Square' Feet ', '20080923'),
(N'Y', N'Yards'', '20080923'),
(N'Y3', N'CubiN' Yards', '20080923');
這是另一回事。我想逃避N'內的所有引用。所以我想得到:
INSERT INTO Production.UnitMeasure
VALUES (N'FT2', N'Square'' Feet ', '20080923'),
(N'Y', N'Yards''', '20080923'),
(N'Y3', N'CubiN'' Yards', '20080923');
(一個報價逃脫報價)。
所以我的想法是識別「N'something」形式的每個字段,然後在「something」內部引用引號。我嘗試過編輯,我發現了一個例子,我得到這個:
N'((?:.(?!',))*.)'
編輯:I improved it,使其只匹配裏面有什麼N「」
所以對於爲例Perl中:
perl的-ne 「S/'((:(??。,))*)(')/ \ 1 /克;打印(< = N?)'」
但現在我試圖逃避比賽中的報價, 有任何想法嗎 ?
謝謝!
數據是如何變得腐敗開始的? :<無論如何,展示*它是如何在bash中使用的 - 它可以簡單地作爲引用或工具(例如。sed)的特性。 – user2864740 2014-09-10 20:17:05
你可以把一個語句的期望輸出? – 2014-09-10 20:21:30
如果您使用原始bash正則表達式字符串,我不確定它是否支持lookarounds。 – RevanProdigalKnight 2014-09-10 20:25:56