我有一个逗号分隔文件(CSV文件)test.csv
,如下所示。
FHEAD,1,2,3,,,,,,
FDEP,2,3,,,,,,,,
FCLS,3,,,4-5,,,,,,,
FDETL,4,5,6,7,8,
FTAIL,5,67,,,,,,
我只想从文件的第二行和第三行中删除空列,即,记录是从哪里开始的,FDEP
并且FCLS
仅在那些行中,我要删除空列(,,)。
删除空列后,同一文件test.csv
应如下所示
FHEAD,1,2,3,,,,,,
FDEP,2,3
FCLS,3,4-5
FDETL,4,5,6,7,8,
FTAIL,5,67,,,,,,
我如何在Unix中做到这一点???
这是使用sed的一种方法:
sed '/^F\(DEP\|CLS\),/ { s/,\{2,\}/,/g; s/,$// }'
我们使用范围/^F\(DEP\|CLS\),/
,即以下命令将仅处理匹配的行^F\(DEP\|CLS\),
。此正则表达式匹配字符串的开头,后跟F
,然后是DEP
或CLS
,然后是,
。换句话说,我们寻找以FDEP,
或开头的行FCLS,
。
找到了这样的行后,我们首先用一个单独的行s
(g
标记),将所有2个或更多(\{2,\}
)逗号(,
)的所有运行(标志,尽可能匹配多次)替换(命令),
。压缩,,,
到单个,
。
其次,我们,
在字符串末尾什么都没有替换。这消除了任何结尾的逗号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句