我被迫计算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'
时间很长:)现在,我想知道是否可以使用y
或other sed command更简洁地重写此脚本?
我知道最好使用awk或其他工具。但是,这不是这里的问题。
请注意,sed脚本基本上模拟了decadic full adder。
答案 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
'