Replace 用sed替换空白

Replace 用sed替换空白,replace,sed,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将Xs添加到第二个客户ID上缺

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

Week      |ID           |Product |Count     |Price
---------- ------------- -------- ---------- -----   
2016-01-01|00056001     |172     |23        |3.50
2016-01-01|1            |125     |15        |2.75
我试图使用sed将Xs添加到第二个客户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

对文件进行任何更改后,都不会更改。我错过了什么

谢谢

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

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

尽管出于安全原因,我宁愿使用限制性更强的脚本,仅当遇到
|1
时才执行替换:

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

您确定sed的
-i
选项表示“就位”吗?在某些系统上,它意味着其他一些东西,这是令人困惑的。它意味着当我在典型的替换过程中使用它时(我必须每月对我们获得的某些数据运行一次特定的命令行)-我总是为meAlso替换内联,我尝试了-e,只是因为我看到它在这种类型的东西中是正确的。我在命令窗口中滚动了100行:)好吧,那么为什么29个空格,而您的输入示例似乎只有15个空格。抱歉,实际数据中有29个空格。我想我会让这张桌子看起来更容易一点。我将编辑以澄清
sed -i "s/[ ]\{29,\}/XXXXXXX                      /" *.csv
sed -i "s/\(\|1\)[ ]\{29,\}/\1XXXXXXX                      /" *.csv