解决data.table::fread()的cmd参数含单双引号的命令传递问题
解决fread(cmd)中引号冲突的问题
你遇到的核心问题是R字符串中同时包含单引号和双引号时的解析冲突,下面提供两种可行的解决办法:
方法一:转义双引号并统一用双引号包裹cmd字符串
将sed命令中的单引号替换为双引号,同时在R字符串里对双引号进行转义(用\"),正则中的双引号也要额外转义一次(变成\\\"),确保shell能正确识别正则规则:
df <- fread(cmd = "unzip -p -a myfolder.zip | sed -Ee :1 -e \"s/^(([^\\\\\",]|\\\\\"[^\"]*\\\\\")*),/\\\\1|/;t1\"", sep = "|", header = TRUE, stringsAsFactors = FALSE, quote = "", fill = TRUE)
方法二:用单引号包裹cmd字符串,转义内部单引号
在R中,单引号包裹的字符串里,内部的单引号需要用两个连续单引号('')转义,这样shell能正确解析sed命令:
df <- fread(cmd = 'unzip -p -a myfolder.zip | sed -Ee :1 -e \'\'s/^(([^\",]|\"[^\"]*\")*),/\\1|/;t1\'\'', sep = "|", header = TRUE, stringsAsFactors = FALSE, quote = "", fill = TRUE)
两种方法都能解决引号冲突问题,推荐第一种,可读性更强。
内容的提问来源于stack exchange,提问作者Annabanana
相关产品推荐
相关产品推荐

