Рассчитать длину строки в седе - PullRequest
0 голосов
/ 01 февраля 2019

Я был вынужден вычислить длину строки в 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 или другая команда sed ?

Я знаю, что лучше использовать awk или другой инструмент.Однако здесь речь не идет.

Обратите внимание, что скрипт sed в основном имитирует десятичный полный сумматор .

1 Ответ

0 голосов
/ 01 февраля 2019

Полагаю, это обман, но:

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
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...