Replace 用sed替换空白
我有一个大文件(100M行),格式如下: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上缺
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