sed,在定界符后的第N个位置插入空格

sed, insert whitespace at the Nth position after a delimiter

我不太擅长使用 bash 尤其是 sed 命令: 我正在尝试使用 sed 在以下字符串中每个空格 之后的第二个位置插入另一个空格

Id_26300, 0404 0202 0202 0202

为了获得:

Id_26300, 04 04 02 02 02 02 02 02

我需要在我的整个文本文件中从第 3 行到最后执行此操作:

FileName
InfoField A B C D
Id_26300, 04 04 02 02 02 02 02 02
Id_26301, 02 02 02 04 02 04 02 02
...

我试图找到解决方案,但无法...非常感谢您的帮助!

鉴于输入有限:

sed '3,$s/ ../& /g'

从第 3 行到文件末尾 3,$,匹配 space 后跟任意 2 个字符 ..。使用 & 表示“匹配的内容”并在其后添加 space。使用g重复做。

这可能适合您 (GNU sed):

sed -E '3,${:a;s/, *([0-9]{2} )*[0-9]{2}\B/& /;ta}' file

从第三行到文件末尾,从第一个字段分隔符 , 开始匹配,任意数量的 space ,零个或多个 2 位数字的集合后跟一个 space,后跟 2 个没有单词边界的数字,并将其替换为匹配和 space。如果替换成功,重复直到失败。

N.B。这仅在第一个字段(可能包含 spaces)之后替换。如果前两行如图所示,则范围可能会被忽略,因此此解决方案只会专门更改仅包含第一个字段之后的数字的行:

sed -E ':a;s/, *([0-9]{2} )*[0-9]{2}\B/& /;ta' file