行の末尾のカンマを削除する


10

bashで一連の末尾のコンマを削除するにはどうすればよいですか。

a,b,c,d,,,,
1,2,3,,,,

望ましい出力:

a,b,c,d
1,2,3

これをやってみました:

 grep "5628" test.csv | sed 's/,*$//g'

しかし、それは機能しません。ファイルはもともとWindowsマシンからのものです。


2
うまくいきませんでしたか?どのコマンドを実行しましたか?
cuonglm 2015

ポジティブ。そうではなかった。
user2980702

正確なコマンドを提供できますか(sedファイル名なしで表示したものはフィルターとして機能し、ファイル
適切に

grep "5628" test.csv | sed 's /、* $ // g'
user2980702

2
* nixでファイルを使用する必要があり、そのファイルをWindowsにコピーして戻す必要がない場合は、長期的には行末をCR / LFからNLに変換する方が簡単dos2unixです。 。
G-Manが「Reinstate Monica」

回答:


13

指定したコマンドを再実行します。

grep "5628" test.csv | sed 's/,*$//g'

これにより、「5628」に一致する行が出力され、末尾のカンマがすべて削除されます。ファイルは更新されませんtest.csv

ただし、ファイルがWindowsマシンからのものであることを示したため、行末はNLではなくCR / NLになっています。その結果、行の終わりに非表示のCRがあり、代わりに次のコマンドラインが必要です。

grep "5628" test.csv | sed 's/,*\r*$//'

実際には、これを1つのコマンドに単純化できます。

sed -n '/5628/s/,*\r*$//p' test.csv

その場で更新するつもりはありません。カンマなしの出力が必要なだけ
user2980702

これはうまくいきましたありがとうございます したがって、ファイルの最後(\ r * $)で復帰する前に、複数のコンマ(、*)を探しています。私は正しいですか?
user2980702

\r*(UNIX / Linuxはファイルを派生して、それが仕事に続けるようにする)0個以上のCR文字が可能になります。私は\r?単一のオプションのCRを示すために使用したいのですsedが、頭上からEREを使用するように指示するためのフラグを思い出せませんでした。-rここではまだテストされていないと思います。これ,*はあなたのものであり、ゼロ個以上のコンマと一致します。
roaima 2015

gこの場合には必要ありません、TERはで指定された唯一の1終わりです$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(後続のコマを取り除くことだけを要求するOPではありません)これにより、パイピングプロセスが回避され、sedはフィルターと変換を直接取得します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.