sed反向引用不工作
我需要处理CSV曲线的每一行,以删除仅以10个逗号开头的行的最后一列。我使用的sed命令是:sed反向引用不工作,sed,Sed,我需要处理CSV曲线的每一行,以删除仅以10个逗号开头的行的最后一列。我使用的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
$ 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
然而,它没有起作用。它把所有的行都原封不动地打印出来了
请帮助。问题在于您运行sed的方式。你做到了:
sed s/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g curves.csv
但是由于参数没有被引用,shell解析转义字符,实际运行的是:
sed s/(,,,,,,,,,,[0-9/]*),[0-9.]*/\1/g curves.csv
它与任何内容都不匹配,因为文件中没有括号。您应该如何运行它:
sed 's/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g' curves.csv
问题在于您运行sed的方式。你做到了:
sed s/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g curves.csv
但是由于参数没有被引用,shell解析转义字符,实际运行的是:
sed s/(,,,,,,,,,,[0-9/]*),[0-9.]*/\1/g curves.csv
它与任何内容都不匹配,因为文件中没有括号。您应该如何运行它:
sed 's/\(,,,,,,,,,,[0-9/]*\),[0-9.]*/\1/g' curves.csv
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
(...)
(...)
,,,,,,,,,,2017/10/18
,,,,,,,,,,2017/11/15
,usdSN,:usdSN,,,,8005,$,,2017/08/07,结算日期
,,,,,,,,,,2017/12/20
,,,,,,,,,,2018/01/17
,,,,,,,,,,2018/02/21
(...)
,,,,,,,,,,2018/12/21
,USDZ,:USDZ,,,,,8007,$,,2017/08/07,结算日期
,,,,,,,,,,2017/08/16
(...)
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
(...)
(...)
,,,,,,,,,,2017/10/18
,,,,,,,,,,2017/11/15
,usdSN,:usdSN,,,,8005,$,,2017/08/07,结算日期
,,,,,,,,,,2017/12/20
,,,,,,,,,,2018/01/17
,,,,,,,,,,2018/02/21
(...)
,,,,,,,,,,2018/12/21
,USDZ,:USDZ,,,,,8007,$,,2017/08/07,结算日期
,,,,,,,,,,2017/08/16
(...)
sed s/(,,,,,,,,,[0-9/]*),[0-9.]*/\1/g curves.csv sed s/(,,,,,,,,,[0-9/]*),[0-9.]*/\1/g curves.csv优雅解决方案。优雅解决方案。