如何只在sed中填充字符

如何只在sed中填充字符

我有这个文件。我只想使用 sed,而不使用 awk

FSDFDSFSD
FDSFD
FHGDHFDHGHFGHGHGF
HHGDF
GFDGDFGFDG
GFDGFDGFDGDFGDGD

我想用 000 填充每个奇数行,以便每行总字符数为 30

我想要像这样的输出

FSDFDSFSD0000000000
FDSFD
FHGDHFDHGHFGHGHGF00
HHGDF
GFDGDFGFDG000000000
GFDGFDGFDGDFGDGD

答案1

单程:

sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file

匹配任意字符(.),匹配1~29个同类型字符(1,29)。如果匹配成功,则在模式matched( &)后面加上'0'。当匹配失败时,这意味着当不包括第一个字符的字符数超过 29 时,停止匹配,因此我们得到字符串零填充 30。

n最后只需读取下一行并打印它。这样偶数行就可以不受影响地打印。

执行上面的脚本:

$ sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file
FSDFDSFSD000000000000000000000
FDSFD
FHGDHFDHGHFGHGHGF0000000000000
HHGDF
GFDGDFGFDG00000000000000000000
GFDGFDGFDGDFGDGD

答案2

另一种方法:

sed 's/$/000000000000000000000000000000/;s/\(.\{30\}\).*/\1/;n'

这比每次附加一个字符的迭代方法更快,但请注意,它首先会截断长度超过 30 个字符的行。

相关内容