In Ubuntu I'm working on a C file that was originally created under Windows and then committed to source control.
Vim shows the file format is "dos", which I gather just means it has
CR/LF line endings. I wanted to get a list of function definitions in the file by using
grep to find the regular expression
')$', but it returned nothing. When I changed the file format to "unix" (
:set ff=unix in
vim) then the
grep worked as expected.
Is this a bug, or does
grep officially not support
CR/LF line endings? I did find this on the
-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.
But it does say under MS-DOS and MS-Windows in the previous sentence, so I don't know if that applies at all here?
Is there some other regular expression that should match
CR/LF, or some other command-line option to
grep I'm not seeing that would help? Or is the only solution really for me to create a bunch of commit-noise by reformatting my colleagues' files?