2017-06-06 241 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;/;:/; 

對此使用替代運算符是矯枉過正。