Я хотел бы отредактировать все текстовые файлы в определенном каталоге, в которых есть одна или несколько строк, длина которых превышает определенный порог. Как я могу это сделать?
Для простоты давайте предположим, что все текстовые файлы в каталоге и его подкаталогах имеют одинаковое расширение файла - скажем, .java
.
P.S. Мой любимый редактор - emacs.
В терминале после перехода в соответствующий каталог введите:
find -name '*.java' -exec awk -vORS= Откроется все файлы .java
, содержащие строки длиной более 116 символов, в новом экземпляре emacs - если вашей переменной окружения EDITOR присвоено имя какого-либо другого текстового редактора, и в этом случае он откроет их вместо этого.
\\0' 'length > 116 {print FILENAME; nextfile}' {} +|xargs -0 ${EDITOR:=emacs}
Откроется все файлы .java
, содержащие строки длиной более 116 символов, в новом экземпляре emacs - если вашей переменной окружения EDITOR присвоено имя какого-либо другого текстового редактора, и в этом случае он откроет их вместо этого.
Если вы не хотите рекурсии в подкаталогах, сделать это гораздо проще:
grep -lZ '.\{116\}' *.java | xargs -0 "${EDITOR:=emacs}"
Если вам нужна рекурсия в подкаталогах, используйте опцию globstar
:
shopt -s globstar
grep -lZ '.\{116\}' **/*.java | xargs -0 "${EDITOR:=emacs}"
Основываясь на ответе gniourf_gniourf, вот способ, который работает в emacs и позволяет вам переходить непосредственно к длинным строкам с помощью TAB
, за которым следует RET
:
M-x rgrep RET .\{116\} RET *.java RET [insert directory to scan here] RET