我有这个文件。我只想使用 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 个字符的行。