关闭后我有一个空格/新行?> (php标签)破坏了我的应用程序。
如何轻松找到它我在这个应用程序中有1000个文件和100000行代码。
理想情况下,在一些正则表达式结合使用find grep以在unix框上运行之后。
答案 0 :(得分:14)
这里的问题是正常的grep与多行不匹配。所以,我会安装pcregrep
并尝试以下命令:
pcregrep -rMl '\?>[\s\n]+\z' *
这将使用PCRE多行匹配(-r
部分)匹配文件夹和子文件夹(-M
部分)中的所有文件,并仅列出其文件名(-l
部分)
对于模式,匹配?>
后跟1个或多个空格或换行符,然后是文件\z
的结尾。我发现,当我在我的文件夹上运行它时,许多PHP文件确实以一个换行结束。因此,您可以将该正则表达式更新为'\?>[\s\n]+\n\z'
,以匹配单个\n
字符终止符之上和之上的空白文件。
最后,如果您需要检查其确切的字符序列结尾,您始终可以使用od -c filename
打印文件的明确表示。
答案 1 :(得分:1)
使用perl;
perl -0777 -i -pe 's/\s*$//s' *.php
s / \ s * $ // s - 将所有行视为一行,并将末尾的任何空格替换为空
答案 2 :(得分:1)
这可以使用常规grep
grep -Pz '\?>[\s]+$' -Rl
将搜索从当前目录开始的所有文件,并列出文件末尾带有?>
后跟空格的所有文件。
-P
将模式解释为与Perl兼容的正则表达式(PCRE)。-z
将输入文件视为一条长行 - 这部分是为了让它起作用[\s]+
至少匹配一个空格 - 包括换行符如果您只想匹配PHP文件:
find -name '*.php' | xargs grep -Pz '\?>[\s]+$' -l
要在之前的文件开头搜索空白区域
find -name '*.php' | xargs grep -Pz '^[\s]+<\?' -l
答案 3 :(得分:0)
这适用于我的方框:
for i in `find . -name "*.php"`; do (echo -n "$i: "; tail -c 3 $i) | grep -v "[?]>"; done
这个想法是你只用尾巴的最后3个字符,然后丢弃那些'?','&gt;'的文件和换行符。如果有空格或其他换行符,您将无法获得'?'字符..
答案 4 :(得分:0)
sed -e :a -e '/^[ \n]*$/{$d;N;ba' -e '}' -e '$ s/\([^ ]\)*?>[ ]*/\1?>/' file.php > new_file.php
对未完全测试的每个文件执行..
记得处理一个临时文件,然后在sed操作后复制原始文件上的新文件..
答案 5 :(得分:0)
这对我有用...
<\?php | \?>
如果您需要在sublime-settings文件中使用或不喜欢正斜杠的文件,则可能需要为每个斜杠添加一个额外的斜杠,就像这样...
<\\?php | \\?>
希望有帮助!
答案 6 :(得分:0)
这对我有用,可以在php文件之前找到空格
find -name '*.php' | xargs grep -Pz '\?>[\s]+$' -l
答案 7 :(得分:-2)
使用notepad ++你可以同时轻松替换所有文件,放下并删除文件夹并按CTRL + R,也可以使用Regex
答案 8 :(得分:-2)
grep '?> ' *.php
?当然,它可能不是空格,可能是换行符或制表符,因此您可能想尝试其他字符。