Я хотел бы найти строки в моем коде, которые превышают определенную длину. Мой код находится в нескольких файлах. Какой хороший способ сделать это?
Я хотел бы знать файлы и номера строк; содержание было бы предпочтительным, но не обязательно. Цель упражнения - выяснить, как разбить линии (возможно, вручную).
text-processing
Marcin
источник
источник
grep
), или как номера строк, или как что-то еще (возможно, вы хотите применить к ним другое действие)? Вероятно, наиболее удобный способ сделать это зависит от того, что будет сделано с этими строками дальше.Ответы:
С
grep
:Для строк длиной не менее 12 символов.
С несколькими файлами:
Некоторые
grep
реализации, такие как GNUgrep
, могут сами находить файлы.Но остерегайтесь символических ссылок и других нестандартных файлов.
источник
Решение AWK
Или, более кратко:
источник
awk 'length > 5'
awk 'length > 5'
awk
несколько менее элегантный, но лаконичныйawk '/^.{6,}/'
awk '/.{6}/'
(на самом деле, GNU до недавнего времени раньше не работал, если вы не передадите POSIXLY_CORRECT в его среду).Поскольку единственное, чего не хватало, было
sed
решениемисточник
Решение Bash
Так, например
./whatever.sh < input.file
. Это не включает перевод строки путем вычитания 1 из$len
; если это нежелательно, или ваш ввод использует окончания CRLF, вы должны соответствующим образом настроить.источник
${#line}
избежатьexpr
развилки?bash
решения. Но учтите, что, если вы не встанетеIFS=
перед собойread
, начальные пробелы будут игнорироваться.$line
поэтому нет необходимости вычитать его.read
имя для чтения, оно будет читатьREPLY
и включать все пробелы. НетIFS
не требуется установка.while read
циклы для обработки текста действительно плохая практика.С помощью
perl
(например), при условии, что вы ищете строки длиной более 80 символов:Чтобы отобразить строки:
Чтобы отобразить номер строки:
Или оба:
источник
-l
командную строку,perl
будет считать разрыв строки в ваших строках.Рубин :
Python:
источник
Вот еще одно решение для bash (bash 4):
Полученный массив является разреженным, поэтому индексы массива сохраняются. Поскольку мы начали с 1, индексы - это номера строк, которые мы сохранили. Мы можем вывести только эти номера строк:
Или мы можем вывести сами строки:
источник