Есть ли способ заменить шаблон по длине на Sed / Awk / Perl? Я ищу небольшие переносимые команды, которые можно использовать в скрипте Bash.
У меня есть строки, которые начинаются с определенного символа (скажем, x
), и я хочу заменить эти повторения x
их длиной.
Так
xxxx rest of the line
xxx again
xx again and again
xxxxx you got my point
Станет
4 rest of the line
3 again
2 again and again
5 you got my point
Сед не может быть хорошим кандидатом. Я знаю, что в Perl есть опция e
, которая позволяет выполнять код в строке подстановки, но я не уверен, как он будет использоваться здесь: perl -pe 's/^(x+)/length($1)/e'
?
2 ответа
Заменить первый шаблон на его длину:
awk '$1=length($1)' file
Выход:
4 rest of the line 3 again 2 again and again 5 you got my point
Вот gawk
версия, но ваше решение на Perl умнее и лучше. Захватите ведущий xx....
в переменную с именем first
с помощью функции gensub
. и позже замените первый столбец его длиной.
awk '{first=gensub(/(^x+).*/,"\\1","g", $0);$1=length(first)}1' file
4 rest of the line
3 again
2 again and again
5 you got my point
Который может быть дополнительно сокращен как:
awk '{$1=length(gensub(/(^x+).*/,"\\1","g", $0))}1' file
Похожие вопросы
Новые вопросы
bash
Для вопросов о скриптах, написанных для командной оболочки Bash. Для сценариев оболочки с ошибками / синтаксическими ошибками, пожалуйста, проверьте их с помощью программы shellcheck (или на сервере веб-проверки оболочки по адресу https://shellcheck.net) перед размещением здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут касаться темы Super User, а не переполнения стека.