Chciałbym znaleźć wiersze w moim kodzie, które przekraczają określoną długość. Mój kod jest w wielu plikach. Jak to zrobić?
Chciałbym poznać pliki i numery linii; treść byłaby preferowana, ale niekonieczna. Celem tego ćwiczenia jest ustalenie, jak przełamać linie (prawdopodobnie ręcznie).
text-processing
Marcin
źródło
źródło
grep
), lub jako numery linii, lub jako coś innego (być może chcesz zastosować wobec nich inną akcję)? Prawdopodobnie najwygodniejszy sposób na zrobienie tego zależy od tego, co zostanie zrobione z następnymi liniami.Odpowiedzi:
Z
grep
:Dla linii o długości co najmniej 12 znaków.
Z kilkoma plikami:
Niektóre
grep
implementacje, takie jak GNUgrep
, mogą same wyszukiwać pliki.Ale uważaj na dowiązania symboliczne i inne nieregularne pliki.
źródło
Rozwiązanie AWK
Lub, bardziej zwięźle:
źródło
awk 'length > 5'
awk 'length > 5'
awk
jest nieco mniej elegancki, ale zwięzłyawk '/^.{6,}/'
awk '/.{6}/'
(właściwie GNU awk do niedawna był tym, w którym to nie działałoby, chyba że przekażesz POSIXLY_CORRECT do jego środowiska).Ponieważ brakowało tylko jednego
sed
rozwiązaniaźródło
Rozwiązanie Bash
Więc np
./whatever.sh < input.file
. Nie obejmuje to nowej linii przez odjęcie 1 od$len
; jeśli nie jest to pożądane lub twoje dane wejściowe używają zakończeń CRLF, powinieneś odpowiednio dostosować.źródło
${#line}
uniknąćexpr
widelca?bash
roztworu. Pamiętaj jednak, że jeśli nie zostanieszIFS=
przedread
, spacje wiodące zostaną zignorowane.$line
więc nie musisz go odejmować.read
nazwy do odczytania, będzie ona odczytywaćREPLY
i zawierać wszystkie białe znaki. NieIFS
wymaga ustawienia.while read
pętle do przetwarzania tekstu to naprawdę zła praktyka.Za pomocą
perl
(na przykład), zakładając, że szukasz linii dłuższych niż 80 znaków:Aby wyświetlić linie:
Aby wyświetlić numer linii:
Lub obie:
źródło
-l
linię poleceń,perl
policzy podział linii w twoich liniach.Rubin:
Python:
źródło
Oto inne rozwiązanie bash (bash 4):
Powstała tablica jest rzadka, więc wskaźniki tablicy są zachowane. Odkąd zaczęliśmy od 1, indeksy są numerami linii, które trzymaliśmy. Możemy wyprowadzić tylko te numery linii:
Lub możemy wyprowadzić same linie:
źródło