答案 0 :(得分:5)
您可以使用与非逗号匹配的正则表达式,并捕获该组,然后在替换中恢复它。
echo "This,is,a,test" |sed 's/,\([^,]*\)$/ \1/'
输出:
This,is,a test
答案 1 :(得分:4)
$ echo "This,is,a,test" | sed 's/\(.*\),/\1 /'
This,is,a test
有lookbehind,
$ echo "This,is,a,test" | perl -pe 's/.*\K,/ /'
This,is,a test
*
贪婪,试图尽可能地匹配。
答案 2 :(得分:4)
所有答案都基于正则表达式。这是删除最后一个逗号的非正则表达方式:
s='This,is,a,test'
awk 'BEGIN{FS=OFS=","} {$(NF-1)=$(NF-1) " " $NF; NF--} 1' <<< "$s"
This,is,a test
答案 3 :(得分:1)
自Gnu AWK以来,标记为:
$ echo This,is,a,test|awk '$0=gensub(/^(.*),/,"\\1 ","g",$0)'
This,is,a test
答案 4 :(得分:1)
一种方法是使用Bash Parameter Expansion。
$ s="This,is,a,test"
$ echo "${s%,*} ${s##*,}"
This,is,a test