Любой способ заставить grep понимать окончания строк Windows? - PullRequest
1 голос
/ 24 сентября 2019

Я недавно установил PortableGit из GitForWindows, узнав, что Github для Windows больше не упаковывает Git Shell (который я очень полюбил).Я хотел бы иметь возможность grep мои исходные файлы для текста в конце строки: например, grep -R -n --include "*.py" -P ":$" ..Как написано, это не работает из-за окончания строки в Windows - вместо этого я должен использовать ":\r$" (или, возможно, что-то более изощренное, чтобы быть более надежным).Это раздражает;Мне трудно запомнить, и мне не нужен такой обходной путь в gVim.Я не припоминаю необходимости делать это с помощью утилиты grep, встроенной в Git Shell;но инструменты PortableGit, похоже, играют довольно строго по книге.

Можно ли как-то заставить grep трактовать \r\n как конец строки, или не справиться с этим каким-либо другим улучшением здесь?Я бы предпочел не преобразовывать весь мой источник в окончания файлов Unix;но если это то, что нужно, мне также понадобится помощь, чтобы заставить gVim соблюдать это соглашение (в том числе для новых файлов).(Это все еще не идеально, хотя; я также могу захотеть обработать вывод программы, и, поскольку я пишу файлы в текстовом режиме на Python, они, естественно, имеют окончания строк в Windows.)

1 Ответ

1 голос
/ 24 сентября 2019

Вы не можете установить последовательность разрыва строки, отличную от последовательности по умолчанию, с помощью grep.

Однако вы можете сделать это с помощью pcregrep.Чтобы форсировать окончания строки CRLF, используйте параметр -N, например, такой:

pcregrep -N CRLF 'regex' file

Или, если вы хотите установить CR (как на старых MacOS):

pcregrep -N CR 'regex' file
...