2017-06-06 189 views
-3

我正在更新一段代码以将表格读入R.表中的分隔符应该是分号。表中的一些元素有分号,应该用冒号替换。与此同时,代码以分号替换标签,并且应该保留。在Perl中用多个替换器替换多个字符

当前的脚本有行

sprintf("%s -e '%s' | perl -pe 's/\t/;/g' > %s", hive.cmd, sql, tmp_file) 

,并应更新,以便:

  1. 更换;:
  2. ;

编辑替换\t :我应该补充一点,我对Perl没有经验。

+1

你有什么问题?你有什么尝试? –

+0

我对Perl没有经验,对时间有点紧迫:我希望解决方案很简单,但现在没有时间自学基础知识。 – AVS

+2

在互联网上发布问题并不是获得帮助的最佳方式,如果你“有点时间紧迫”。我可以推荐提供专家钱来换取他们的技能吗? –

回答

-1

一个简单的另一种方式来替换字符串:

需要找到两场比赛\;\t我们可以搜索他们两个在一个单一的正则表达式并替换为相应的值匹配。

$str=~s/((\;)|\t)/$2 ? '\:' : '\;'/eg; 
     ^^

$2semicolon和休息的一个比赛用\t区划界定匹配。

print $str; 
+2

我没有downvoted,但是这似乎是一个非常复杂的方式来写'TR/\吨; /;:/':-) –

+0

@DaveCross是的,但这是采取如果某些搜索或更换方法字符串是多个字符;值得拥有作为替代答案 – ysth

+0

@ysth:同意。这就是为什么(正如我所说)我没有降低。 –

4

Perl的“音译”运算符(tr/.../.../)用于执行此类工作。

$string =~ tr/\t;/;:/; 

对此使用替代运算符是矫枉过正。