问题描述
||
因此,在结束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
?当然,它可能不是空格,可能是换行符或制表符,因此您可能需要尝试其他字符。