2017-08-11 2 views
0

10カンマで始まる行の最後の列を削除するには、カーブCSVのすべての行を処理する必要があります。私が使ったsedコマンドは:sedバックリファレンスが動作しない

$ cat curves.csv 
(...) 
,,,,,,,,,,2017/10/18,20630.000000 
,,,,,,,,,,2017/11/15,20595.000000 
,usdSN,:usdSN,,,,8005,$,,2017/08/07,Settlement Date 
,,,,,,,,,,2017/12/20,20575.000000 
,,,,,,,,,,2018/01/17,20555.000000 
,,,,,,,,,,2018/02/21,20535.000000 
(...) 
,,,,,,,,,,2018/12/21,20290.000000 
,usdZS,:usdZS,,,,8007,$,,2017/08/07,Settlement Date 
,,,,,,,,,,2017/08/16,2848.500000 
(...) 

$ sed s/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g curves.csv 

でした。すべての行を変更せずに印刷しました。

助けてください。

+0

をsedのS/\(,,,,,,,,,, [0-9 /] * \)、[0-9。] */\ 1/g curves.csv <----- not working – AlexL

答えて

1

問題はあなたがsedを実行している方法です。あなたはやった:

sed s/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g curves.csv 

しかし、パラメータはシェルがエスケープ文字を解決引用し、どのような実際に実行されることはありませんされているので:何の括弧は中に存在しないので、何も一致しない

sed s/(,,,,,,,,,,[0-9/]*),[0-9.]*/\1/g curves.csv 

あなたのファイル。どのようにあなたがそれを実行する必要がありますされています

sed 's/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g' curves.csv 
2

GNU持つ別のアプローチは、sedを:

sed -r '/^,{10}/{s/,[^,]*$//}' file 

出力:

 
(...) 
,,,,,,,,,,2017/10/18 
,,,,,,,,,,2017/11/15 
,usdSN,:usdSN,,,,8005,$,,2017/08/07,Settlement Date 
,,,,,,,,,,2017/12/20 
,,,,,,,,,,2018/01/17 
,,,,,,,,,,2018/02/21 
(...) 
,,,,,,,,,,2018/12/21 
,usdZS,:usdZS,,,,8007,$,,2017/08/07,Settlement Date 
,,,,,,,,,,2017/08/16 
(...) 
+0

エレガントなソリューション。 – CWLiu

関連する問題