所以我在关闭之后有一个空格/新行?>(php标签)正在破坏我的应用程序。
如何轻松找到它我在这个应用程序中有1000个文件和100000行代码。
理想情况下,在一些正则表达式结合查找grep以在unix框上运行之后。
所以我在关闭之后有一个空格/新行?>(php标签)正在破坏我的应用程序。
如何轻松找到它我在这个应用程序中有1000个文件和100000行代码。
理想情况下,在一些正则表达式结合查找grep以在unix框上运行之后。
这里的问题是正常的grep不匹配多行。所以,我会安装 pcregrep
并尝试以下命令:
pcregrep -rMl '\?>[\s\n]+\z' *
这将匹配文件夹和子文件夹中的所有文件( -r
部分)使用PCRE多行匹配( -M
部分),并且只列出他们的文件名( -l
部分)。
至于模式,那就匹配了 ?>
后跟一个或多个空格或换行符,后跟文件末尾 \z
。我发现,当我在我的文件夹上运行它时,许多PHP文件确实以一个换行结束。所以你可以更新那个正则表达式 '\?>[\s\n]+\n\z'
匹配单个上面和上面的空格的文件 \n
字符终止符。
最后,您可以随时使用 od -c filename
如果需要检查其确切的字符序列结尾,则打印文件的明确表示。
使用perl;
perl -0777 -i -pe 's/\s*$//s' *.php
s / \ s * $ // s - 将所有行视为一行,并将末尾的任何空格替换为空
这可以通过常规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
这适用于我的盒子:
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操作后复制原始文件上的新文件。
使用notepad ++你可以同时轻松替换所有文档,将文件放到文件夹并按CTRL + R,也可以使用Regex
grep '?> ' *.php
?当然,它可能不是空格,可能是换行符或制表符,因此您可能想尝试其他字符。