No Ubuntu, estou trabalhando em um arquivo C que foi originalmente criado no Windows e depois comprometido com o controle de origem. Vim
mostra que o formato do arquivo é "dos", o que eu obtenho apenas significa que ele tem CR/LF
finais de linha. Eu queria obter uma lista de definições de função no arquivo usando grep
para encontrar a expressão regular ')$'
, mas ela não retornou nada. Quando mudei o formato do arquivo para "unix" ( :set ff=unix
in vim
), então o grep
funcionou como esperado.
Isso é um bug, ou o grep
oficialmente não suporta CR/LF
finais de linha? Eu encontrei isso na página man
:
-U --binary Treat the file(s) as binary. By default, under MS-DOS and MS-Windows, grep guesses whether a file is text or binary as described for the --binary-files option. If grep decides the file is a text file, it strips carriage returns from the original file contents (to make regular expressions with ^ and $ work correctly). Specifying -U overrules this guesswork, causing all files to be read and passed to the matching mechanism verbatim; if the file is a text file with CR/LF pairs at the end of each line, this will cause some regular expressions to fail. This option has no effect on platforms other than MS-DOS and MS-Windows.
Mas ele diz em MS-DOS e MS-Windows na sentença anterior, então não sei se isso se aplica aqui?
Existe alguma outra expressão regular que deve corresponder a CR/LF
, ou alguma outra opção de linha de comando para grep
Não estou vendo que isso ajudaria? Ou a única solução para mim é criar um monte de ruído de comprometimento reformatando os arquivos dos meus colegas?