我有一个逗号分隔文件(CSV文件)test.csv
,如下所示。
FHEAD,1,2,3,,,,,,
FDEP,2,3,,,,,,,,
FCLS,3,,,4-5,,,,,,,
FDETL,4,5,6,7,8,
FTAIL,5,67,,,,,,
我只想从文件的第2行和第3行删除空列,即只有那些记录以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中做到这一点?
答案 0 :(得分:1)
使用sed:
,这是一种方法sed '/^F\(DEP\|CLS\),/ { s/,\{2,\}/,/g; s/,$// }'
我们使用/^F\(DEP\|CLS\),/
范围,即以下命令仅处理与^F\(DEP\|CLS\),
匹配的行。此正则表达式匹配字符串开头,后跟F
,后跟DEP
或CLS
,后跟,
。换句话说,我们会查找以FDEP,
或FCLS,
开头的行。
找到这样一行之后,我们首先用2个或更多(s
)个逗号替换(g
命令)所有运行(\{2,\}
标志,尽可能多次匹配)( ,
)由一个,
连续排列。这会将,,,
压缩为单个,
。
其次,我们将,
替换为字符串结尾处的任何内容。这消除了任何尾随的逗号。