So I have a space/new line after a closing ?>
(php tag) that is breaking my application.
How can I find it easily I have 1000 of files and 100000 lines of code in this app.
Ideally im after some regex combined with find grep to run on a unix box.
So I have a space/new line after a closing ?>
(php tag) that is breaking my application.
How can I find it easily I have 1000 of files and 100000 lines of code in this app.
Ideally im after some regex combined with find grep to run on a unix box.
This is possible with regular grep
Will search for all files starting from the current directory and list all that have a
?>
followed by white space at the end of the file.-P
Interpret the pattern as a Perl-compatible regular expression (PCRE).-z
Treats the input file as one long line - this is in part what makes it work[\s]+
matches at least one white space - including newlinesIf you want to match PHP files only:
To search for white space at the beginning of the file before
This works on my box:
The idea is that you take just the last 3 characters with tail, then discard the files where those are '?', '>' and newline. If there's a space or another newline, you won't get the '?' character..
The problem here is normal grep doesn't match multiple lines. So, I would install
pcregrep
and try the following command:This will match all files in the folder and subfolders (the
-r
part) using PCRE multiline match (the-M
part), and only list their filenames (the-l
part).As for the pattern, well that matches
?>
followed by 1 or more whitespace or newline characters, followed by the end of the file\z
. I found though, when I ran this on my folder, many of the PHP files do in fact end with a single newline. So you can update that regex to be'\?>[\s\n]+\n\z'
to match files with whitespace over and above the single\n
character terminator.Lastly, you can always use
od -c filename
to print unambiguous representation of the file if you need to check its exact character sequence ending.use perl;
s/\s*$//s - treat all lines as a single line and substitute any space at the end to nothing
This worked for me to find white spaces before php files
grep '?> ' *.php
? Of course, it may not be a space and could be a linebreak or a tab, so you may want to try other characters.