通过xp_cmdshell使用sed转义反引号

时间:2016-10-18 10:46:43

标签: sed escaping xp-cmdshell

我正在尝试编辑通过xp_cmdshell从SQL Server 2008r2调用的现有流程。它会在导入之前替换/删除csv文件中的某些字符。我设法添加删除fullstops但是在删除反引号时遇到问题。我试图逃避它的每一种方式我都得到错误sed:-e expression#1,char 97:Unterminated s'命令。

在SQL中:

DECLARE 
    @FileLocation VARCHAR(255)          = '\\FILELOCATION\'
    ,@ArchiveLocation VARCHAR(255)      = '\\FILELOCATION\Archive\'
    ,@FileName VARCHAR(50)              = 'DATE_FILENAME.csv'
    ,@UtilitiesLocation VARCHAR(100)    = '\\NETWORKLOCATION\UTILITIES\'
    ,@Command           VARCHAR(2000)

DECLARE @SedCommand     VARCHAR(100)    = 
      's/£//g;'     -- remove pound signs
    + 's/\.//g;'    -- remove full stop
    + 's/\`//g;'    -- remove grave accent (backtick)
    + 's/\"\([A-Za-z- '']*\),\([A-Za-z- '']*\)\"/\1|\2/g;'  -- "Last, First" replaced by Last|First
    + 's/\"\([0-9.-]*\),\([0-9.-]*\)\"/\1\2/g;'             -- remove thousands separators in numbers

SET @Command = 
      'copy '
    + @FileLocation + @FileName + ' '
    + @ArchiveLocation + 'QN' + @FileName
PRINT @Command -- copy \\FILELOCATION\DATE_FILENAME.csv \\FILELOCATION\Archive\QNDATE_FILENAME.csv

EXEC xp_cmdshell @Command

SET @Command = 
      @UtilitiesLocation + 'sed --text -e ' 
    + '"' + @SedCommand + '" '
    + @ArchiveLocation + 'QN' + @FileName
    + ' > '
    + @FileLocation + @FileName
PRINT @Command -- \\NETWORKLOCATION\UTILITIES\sed --text -e "s/£//g;s/\.//g;s/\`//g;s/\"\([A-Za-z- ']*\),\([A-Za-z- ']*\)\"/\1|\2/g;s/\"\([0-9.-]*\),\([0-9.-]*\)" \\FILELOCATION\Archive\QNDATE_FILENAME.csv > \\FILELOCATION\DATE_FILENAME.csv

EXEC xp_cmdshell @Command

有人能帮忙吗?我尝试使用3个反斜杠,^作为转义字符,将反引号放在双引号中但无法正常工作。

0 个答案:

没有答案