在结束后找到多余的空间/换行?>php标记

问题描述

|| 因此,在结束application0ѭ(PHP标记)后,我有一个空格/换行符,这打破了我的应用程序。 如何轻松找到它,我在此应用中拥有1000个文件和100000行代码。 理想情况下,在将某些正则表达式与find grep结合使用后,im可以在unix框上运行。     

解决方法

这里的问题是正常的grep不匹配多行。因此,我将安装“ 1”并尝试以下命令:
pcregrep -rMl \'\\?>[\\s\\n]+\\z\' *
这将使用PCRE多行匹配(the4ѭ部分)来匹配文件夹和子文件夹(
-r
部分)中的所有文件,并且仅列出其文件名(
-l
部分)。 至于模式,它与
?>
匹配,后跟1个或多个空格或换行符,然后跟文件
\\z
末尾匹配。不过,我发现,当我在文件夹上运行该文件时,实际上许多PHP文件的结尾都是一个换行符。因此,您可以将该正则表达式更新为
\'\\?>[\\s\\n]+\\n\\z\'
,以匹配具有单个
\\n
字符终止符以上空格的文件。 最后,如果需要检查文件的确切字符序列结尾,可以始终使用ѭ10键来打印文件的明确表示。     ,使用Perl;
perl -0777 -i -pe \'s/\\s*$//s\' *.php
-0777将吞下整个文件(-0也可以) -i-就地编辑,因此文件将被替换为结果 -p打印行 -e perl表达式 s / \\ s * $ // s-将所有行视为单行,并将结尾处的任何空格替换为空     ,使用常规grep可以做到这一点
grep -Pz \'\\?>[\\s]+$\' -Rl
从当前目录开始搜索所有文件,并列出所有带有“ 0”的文件,并在文件末尾列出空白。
-P
将模式解释为与Perl兼容的正则表达式(PCRE)。
-z
将输入文件视为一长行-部分原因是使其起作用
[\\s]+
至少匹配一个空格-包括换行符 如果只想匹配PHP文件:
find -name \'*.php\' | xargs grep -Pz \'\\?>[\\s]+$\' -l
要在文件开头搜索空格,请先
find -name \'*.php\' | xargs grep -Pz \'^[\\s]+<\\?\' -l
    ,这适用于我的盒子:
for i in `find . -name \"*.php\"`; do (echo -n \"$i: \"; tail -c 3 $i) | grep -v \"[?]>\"; done
这样做的想法是,您只使用尾部的最后3个字符,然后丢弃\'?',\'> \'和换行符所在的文件。如果有空格或其他换行符,则不会获得\'?\'字符。     ,
sed -e :a -e \'/^[ \\n]*$/{$d;N;ba\' -e \'}\' -e \'$ s/\\([^ ]\\)*?>[ ]*/\\1?>/\' file.php > new_file.php
对未完全测试的每个文件执行。 记住要处理一个临时文件,并且在sed操作之后,将新文件复制到原始文件上。     ,这对我有用...
<\\?php | \\?>
如果您需要在sublime-settings文件中使用或不喜欢正斜杠的文件,则可能需要为每个斜杠添加一个额外的斜杠,如下所示...   <\\\\?php | \\\\?> 希望有帮助!     ,这对我有用,以便在php文件之前找到空格
find -name \'*.php\' | xargs grep -Pz \'\\?>[\\s]+$\' -l
    ,使用notepad ++,您可以轻松地同时替换所有文档,将文件拖放到该文件夹​​中,然后按CTRL + R,也可以使用Regex     ,
grep \'?> \' *.php
?当然,它可能不是空格,可能是换行符或制表符,因此您可能需要尝试其他字符。