计算sed中的字符串长度

时间:2019-02-01 14:28:02

标签: regex sed

我被迫计算sed中的字符串长度。该字符串始终是a的非空序列。

sed -n ':c /a/! be; s/^a/1/; s/0a/1/; s/1a/2/; s/2a/3/; s/3a/4/; s/4a/5/; s/5a/6/; s/6a/7/; s/7a/8/; s/8a/9/; s/9a/a0/; /a/ bc; :e p'

时间很长:)现在,我想知道是否可以使用yother sed command更简洁地重写此脚本?

我知道最好使用awk或其他工具。但是,这不是这里的问题。

请注意,sed脚本基本上模拟了decadic full adder

1 个答案:

答案 0 :(得分:1)

我想这是作弊,但是:

sed 's/.//;s/./\n/g'|sed -n '$='

您当然可以将现有版本缩短为:

sed -n ':c s/^a/1/; s/0a/1/; s/1a/2/; s/2a/3/; s/3a/4/; s/4a/5/; s/5a/6/; s/6a/7/; s/7a/8/; s/8a/9/; s/9a/a0/; tc; p'

可以使用y/// 进行轮换,但我认为它只能刮掉几个字符,并且\u不可移植:

sed -n '
:c;
s/^a/c/;
s/\([b-j]\)a/\u\1/;
y/BCDEFGHIJ/cdefghijk/;
s/ka/ab/;
tc;
y/bcdefghijk/0123456789/;
p
'