Как «grep» для длины строки * не * в заданном диапазоне?

17

ПРИМЕЧАНИЕ: этот вопрос является дополнением к этому Q & A: Как «grep» для длины линии в заданном диапазоне?


Как мы можем выполнить поиск строк, которые содержат менее 8 или более 63 символов, ни одна из которых не содержит более восьми и менее 63 символов?

Таким образом, некоторые приемлемые числа символов могут быть ...

7 6 5 4 3 2 1 0

...и...

64 65 66 67 ...
LoukiosValentine79
источник
3
Я знаю, что вы просите grep, но вы можете подумать awk, особенно если вам нужна дополнительная обработка и т. Д. (Очень гибкие и удобочитаемые ): awk '( length($0)<8 ) || ( length($0)>63 )' действие #default условия заключается в печати строки (строк), соответствующих условию. Или с меньшей обработкой на $ 0:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Оливье Дюлак
@mikeserv - да, если посмотреть на это снова, то, вероятно, имеет больше смысла приближаться к этим вопросам и ответам как дуп.
SLM
@mikeserv - это вообще боль, мне нужно объединить ответы в один из вопросов, и они затем будут удалены из оригинала. Это руководство для этого: «Вопросы должны объединяться, когда они идентичны на 99%, и было бы полезно, чтобы все ответы от нескольких повторяющихся вопросов были в одном месте. Это удаляет ответы, перемещает их к целевому вопросу и оставляет текущий вопрос в виде заглушки со ссылкой на цель слияния. "
SLM
что случилось с моим комментарием?
Дмитрий Григорьев
@DmitryGrigoryev - думаю, кому-то это не понравилось. возьми это у того, кто был там - забудь об этом.
mikeserv

Ответы:

38
grep -xv '.\{8,63\}' <input >output

grep«S -xпереключатель обозначает целую линию матч - который должен сказать , что любой шаблон соответствует должен определить линию от головы до хвоста. делать ...

grep -x pattern

... обычно эквивалентно ...

grep ^pattern$

grep«S -vпереключатель сводит на нет влияние узора на линии отбора. вообще делаешь ...

grep pattern

... будет выбирать только те линии, которые соответствуют шаблону, но с -vотрицательным шаблоном выбираются только те строки, которые не соответствуют.

...и так...

grep -xv '.\{8,63\}'

... соответствует всем строкам от 8 до 63 символов от головы до хвоста, а -vотрицательный выбор приводит grepтолько к печати всего остального.

mikeserv
источник