用sed替换白色空格

时间:2016-09-26 15:45:07

标签: replace sed

我有一个大文件(100M行),格式如下:

Week      |ID           |Product |Count     |Price
---------- ------------- -------- ---------- -----   
2016-01-01|00056001     |172     |23        |3.50
2016-01-01|1            |125     |15        |2.75

我正在尝试使用sed将X添加到第二个客户ID上的缺失数字,但保留完整ID后的空格数。所以,表格看起来像:

Week      |ID           |Product |Count     |Price
---------- ------------- -------- ---------- -----   
2016-01-01|00056001     |172     |23        |3.50
2016-01-01|1XXXXXXX     |125     |15        |2.75

我试过了

 sed -i "s/\s\{29,\}/XXXXXXX                      /g" *.csv

sed -i -- "s/1                              /1XXXXXXX                       /g" *.csv

对文件的任何更改都不会。我错过了什么?

感谢。

编辑澄清:实际数据中1后有29个空格。为了便于阅读,我在示例表中使用较少的内容。我认为无论空间的数量如何,任何解决方案都适用。

1 个答案:

答案 0 :(得分:2)

这对我有用(不使用\s而只使用空格,并删除了无用的g选项,因为每行仅需要一次):

sed -i "s/[ ]\{29,\}/XXXXXXX                      /" *.csv

虽然出于安全原因,我宁愿使用限制性更强的脚本,只有在遇到|1时才会执行替换:

sed -i "s/\(\|1\)[ ]\{29,\}/\1XXXXXXX                      /" *.csv