2016-09-02 82 views
3

嗨,我想從行中刪除最後一個逗號。例如:如何使用「sed或awk」從bash中的行刪除最後一個逗號

輸入:

This,is,a,test 

所需的輸出:

This,is,a test 

我如果用下面的命令它也是字符串的最後一個字符是能夠刪除最後一個逗號:(然而,這是不是我想要的)

echo "This,is,a,test," |sed 's/,$//' 
This,is,a,test 

如果超過最後一個字符的字符越多,相同的命令不起作用mma在線。

echo "This,is,a,test" |sed 's/,$//' 
This,is,a,test 

我能夠通過調用多個命令使用骯髒的方式來實現的結果,任何替代來達到同樣的用awk或sed的正則表達式?(這是我想要的)

echo "This,is,a,test" |rev |sed 's/,/ /' |rev 
This,is,a test 
+0

的[搜索和使用正則表達式在bash替換]可能的複製(http://stackoverflow.com/questions/13043344/search-and-replace-in-bash-using-regular-expressions) –

+0

有不需要產生sed,awk等進程,因爲純Bash解決方案存在:http://stackoverflow.com/a/22261454/1671066 –

回答

2
$ echo "This,is,a,test" | sed 's/\(.*\),/\1 /' 
This,is,a test 

與回顧後,

$ echo "This,is,a,test" | perl -pe 's/.*\K,/ /' 
This,is,a test 

*是貪心,試圖儘可能地匹配。

5

您可以使用一個匹配not-comma的正則表達式,並捕獲該組,然後將其恢復到替換中。

echo "This,is,a,test" |sed 's/,\([^,]*\)$/ \1/' 

輸出:

This,is,a test 
1

的GNU AWK也因爲標籤:

$ echo This,is,a,test|awk '$0=gensub(/^(.*),/,"\\1 ","g",$0)' 
This,is,a test 
4

所有的答案都基於正則表達式。這是刪除最後一個逗號的非正則表達式:

s='This,is,a,test' 
awk 'BEGIN{FS=OFS=","} {$(NF-1)=$(NF-1) " " $NF; NF--} 1' <<< "$s" 

This,is,a test 
相關問題