我有一个大文件(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个空格。为了便于阅读,我在示例表中使用较少的内容。我认为无论空间的数量如何,任何解决方案都适用。
答案 0 :(得分:2)
这对我有用(不使用\s
而只使用空格,并删除了无用的g
选项,因为每行仅需要一次):
sed -i "s/[ ]\{29,\}/XXXXXXX /" *.csv
虽然出于安全原因,我宁愿使用限制性更强的脚本,只有在遇到|1
时才会执行替换:
sed -i "s/\(\|1\)[ ]\{29,\}/\1XXXXXXX /" *.csv