2016-09-02 17 views
3

こんにちは私は行から最後のカンマを削除したいと思います。たとえば、次のように"sedまたはawk"を使用してbashの行から最後のカンマを削除する方法

入力:

This,is,a,test 

所望の出力:(ただし、これは次のとおりです。

This,is,a test 

コマンドの下に使用して文字列のそのまた最後の文字があれば、私は最後のカンマを削除することができています私はしたくない)

最後のcoより前の文字が複数ある場合、同じコマンドは機能しません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

純粋なBashソリューションが存在するので、sed、awkなどのプロセスを起動する必要はありません。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 

*は貪欲であるが、可能な限り一致させようとします。あまりに以来、タグ付きのGnu AWKで

5

あなたは使用することができます(これは私がしたいです)コンマではないものにマッチし、そのグループをキャプチャして置き換えて復元する正規表現です。

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

出力:後読みと

This,is,a test 
1

$ 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 
1

一つの方法は、Bash Parameter Expansionを使用することです。

$ s="This,is,a,test" 
$ echo "${s%,*} ${s##*,}" 
This,is,a test 
関連する問題