首页 > 解决方案 > 使用 SED 替换 csv 文件中的前导和尾随 spces

问题描述

我正在使用以下命令从文件 A.csv 中删除前导和尾随空格

sed "s/^  \+//g;s/[ \t]*$//;s/ \{1,\}/ /g" <A.csv> B.csv

这是 A.csv 的示例

"a","  v b","z"
"a","   vd","z"
"a","  v, b, c ","z  "
"a","  vb ","z   "

问题是并非所有前导和尾随空格都被删除,如下所示:

"a"," v b","z"
"a"," vd","z"
"a"," v, b, c ","z "
"a"," vb ","z "

下面是我所期待的一个例子:

"a","v b","z"
"a","vd","z"
"a","v, b, c","z"
"a","vb","z"

我怎样才能做到这一点?

标签: sed

解决方案


sed 's/" \+/"/g;s/[ \t]*"/"/g;s/ \{1,\}/ /g' A.csv

输出:

"a","v b","z"
"a","vd","z"
"a","v, b, c","z"
"a","vb","z"

你自己的命令,只有s/ \{1,\}/ /g在工作。
问题是,sed 会将 csv 文件视为简单的文本文件,而不知道逗号和引号用于列。
所以^and$只会匹配每行的开头和结尾。
你也忘了把g第二个s


推荐阅读