Jak „grep” dla długości linii * nie * w danym zakresie?

17

UWAGA: To pytanie jest uzupełnieniem tego pytania i odpowiedzi: Jak „grep” dla długości linii w danym zakresie?


Jak możemy grepować dla linii, które mają mniej niż 8 lub więcej niż 63 znaki, żadna nie zawiera więcej niż osiem i mniej niż 63 znaki?

Tak więc niektóre dopuszczalne liczby znaków mogą być ...

7 6 5 4 3 2 1 0

...i...

64 65 66 67 ...
LoukiosValentine79
źródło
3
Wiem, że o to prosisz grep, ale możesz to rozważyć awk, szczególnie jeśli potrzebujesz dalszego przetwarzania itp. (Bardzo elastyczny i czytelny ): awk '( length($0)<8 ) || ( length($0)>63 )' #default działanie warunku polega na wydrukowaniu linii spełniających warunek. Lub przy mniejszym przetwarzaniu za 0 USD:awk '{ l=length($0) ; if (( l<8 ) || l>63 ) { print $0 ;} }'
Olivier Dulac
@ Mikeserv - tak, patrząc na to ponownie, prawdopodobnie bardziej sensowne jest zamknięcie tego pytania i odpowiedzi jako duplikatu.
slm
@ mikeserv - to na ogół ból, muszę scalić odpowiedzi w jedno z Q, a następnie usunąć je z oryginału. Oto wskazówki, jak to zrobić: „Pytania powinny być łączone, gdy są one w 99% identyczne i korzystne byłoby mieć wszystkie odpowiedzi z wielu zduplikowanych pytań w jednym miejscu. To usuwa odpowiedzi, przenosi je do pytania docelowego i pozostawia aktualne pytanie jako odcinek z linkiem do celu scalania ”.
slm
co się stało z moim komentarzem?
Dmitrij Grigoryev,
@DmitryGrigoryev - zgadnij, że komuś się to nie podobało. weź to od tego, kto tam był - zapomnij o tym.
mikeserv

Odpowiedzi:

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

grep„s -xprzełącznik oznacza całą linię wyniki - to znaczy, że każdy wzór należy dopasować wyznaczają linię od głowy do ogona. robić...

grep -x pattern

... ogólnie odpowiada ...

grep ^pattern$

grep„s -vprzełącznik neguje wpływ wzorzec jest na linii selekcji. ogólnie robi ...

grep pattern

... wybierze tylko linie, które pasują do wzoru, ale przy -vnegowanym wzorze zostaną wybrane tylko te linie, które nie pasują.

...a więc...

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

... dopasowuje wszystkie wiersze, które składają się od głowy do ogona, gdziekolwiek pomiędzy 8 a 63 znaków, a -vzanegowany wybór powoduje grepwydrukowanie wszystkiego innego.

mikeserv
źródło