2013-03-13 63 views
0

我使用GSUB代替用逗號突片GSUB正則表達式模式

gsub(/\t/,\",\") 

a\tb will be a,b 

在一些情況下我具有由彼此 follwed例如

a/t/tb 

在這種情況下GSUB其轉換爲兩個標籤a,,b 我希望在這種情況下,字符串應該轉換爲, - ,b(之間的減號)。

我試着寫兩個sepearate gsubs

gsub(/\t/,\",\") // for tab 

gsub(/,,/,\"/,-,/\") // for consecutive commas 

第二個似乎不工作。

它有什麼問題。有沒有辦法,我可以在一個gsub結合起來。

回答

1

我認爲你問了awk? 我不認爲它可以用一個GSUB做,其實我需要三個:

$ abc=$(echo 'a.b..c...d....e.....f' | tr . '\t') 

$ echo "$abc" | awk '{gsub(/\t/, ","); gsub(/,,/, ",-,"); gsub(/,,/, ",-,"); print}' 
a,b,-,c,-,-,d,-,-,-,e,-,-,-,-,f 

的問題是,在/,,/一個GSUB會消耗兩個逗號,所以它會離開之間的差距下一對逗號,如果有三個或更多個連續的逗號。在一個更強大的正則表達式引擎中,比如Perl,它可以使用一個lookahead一次完成:

$ echo "$abc" | perl -pe 's/\t/,/g; s/,(?=,)/,-/g;' 
a,b,-,c,-,-,d,-,-,-,e,-,-,-,-,f 
+0

非常感謝。我用awk使用它。 – Ank 2013-03-14 00:05:41