2017-08-11 66 views
0

我需要處理曲線CSV的每一行以刪除僅以10個逗號開頭的那些行的最後一列。我使用的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 <-----不工作 – 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