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
我不太擅长使用 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