Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sed反向引用不工作_Sed - Fatal编程技术网

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

我需要处理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.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优雅解决方案。优雅解决方案。