我的文件行包含零填充值。 我想用空格替换所有前导零,但最多只能替换7次。
00000002: <text>
将上述内容更改为以下
2: <text>
我有sed脚本
s/^0/ /;: loop s/ 0/ /;t loop
它取代了所有的零。
该行
00000000: <text>
更改为
: <text>
我想
0: <text>
如果sed循环能够在6次循环后停止,就会发生这种情况。
如何在6(n)次循环后将sed脚本更改为停止。
是的,我可以强行推出它并放入s/ 0/ /
的6个版本。
答案 0 :(得分:2)
嗯,这可能是作弊,我不确定它是否适用于你所有的角落情况:
sed 's/^0/ /;s/0:/x:/;: loop s/ 0/ /;t loop;s/x:/0:/'
实际上,更好的是:
sed 's/^0/ /;: loop s/ 0/ /;t loop;s/ :/0:/'
答案 1 :(得分:2)
Perl非常方便:
$ printf "%08d: blah\n" {0..12..4}
00000000: blah
00000004: blah
00000008: blah
00000012: blah
$ printf "%08d: blah\n" {0..12..4} | perl -pe 's/^0+(?=\d+:)/ " " x length($&) /e'
0: blah
4: blah
8: blah
12: blah
答案 2 :(得分:2)
这可能适合你(GNU sed):
sed -r 's/[^0]/\n&/;h;y/0/ /;G;s/\n.*\n//;s/ :/0:/' file
答案 3 :(得分:0)
sed 's/.*/ & /;s/\([²³]\)/\1o/g
s/\([^[:digit:]]\)\(0\{1,7\}\)\([[:digit:]]\)/\1²\2³\3/g
: space
s/²\( *\)0\(0*\)³/²\1 \2³/g
t space
s/²\( *\)³/\1/g
s/\([²³]\)o/\1/;s/ \(.*\) /\1/'
{1,7}指定要替换的前导0的数量。
它替换了所有行数的全部0。如果只是找到第一个号码
用这个替换第二行:
s/^\([^[:digit:]]*\)\(0\{1,7\}\)\([[:digit:]]\)/\1²\2³\3/