2009-10-07 65 views
0

我有我或许应该使用ACK或egrep的,而不是一种预感,但我应该怎么用,基本找grep的 - 搜索“?< n”在文件开始

<? 

在文件的开始?我试图查找包含PHP短开放标记的所有文件,因为我迁移一堆传统脚本的使用最新的PHP 5

我知道一个相对较新的服务器的正则表达式很可能会'/^<\?\n/'

+1

我想你已经回答了你自己的问题 – 2009-10-07 17:47:35

+0

这样吗?它不起作用? – SilentGhost 2009-10-07 17:47:41

+0

你只是想找到所有的PHP短标签? – 2009-10-07 17:49:03

回答

6

我RTFM和最终使用:

grep -RlIP '^<\?\n' * 

在P参数启用全Perl兼容的正则表达式。

+0

将此问题标记为已回答,以便我们可以继续使用我们的生活;) – 2009-10-07 18:01:05

+0

“您可以在两天内接受您自己的答案。” :( – 2009-10-07 18:07:28

+0

但与此同时,你可以得到一个真正的RTFM自学者徽章。* clicks + 1 * :-P – Tomalak 2009-10-07 18:28:53

1

如果你担心窗口行结束,只需添加\r?

4

如果你正在寻找所有的PHP短标记,使用negative lookahead

/<\?(?!php)/ 

将匹配<?但不会匹配<?php

[meder ~/project]$ grep -rP '<\?(?!php)' . 
+0

+1用于考虑负向预测并指定-P。 – 2009-10-07 20:12:43

0
grep '^<?$' filename 

不知道这是否是正确显示。应该是

grep'^ <? $“文件名

0

你的意思是字面上的“反斜杠n”还是你的意思是换行符?

对于前者:

grep '^<?\\n' [files] 

对于后者:

grep '^<?$' [files] 

注意的grep将搜索所有行,所以如果你想只是在文件的开始找到比赛,你将需要将每个文件过滤到第一行,或者要求grep打印出行号,然后只查找第1行匹配项。

2
find . -name "*.php" | xargs grep -nHo "<?[^p^x]" 

^X排除XML开始标记

+0

很好地工作,并且不需要grep用Perl regex支持重新编译 – udog 2013-07-19 14:43:45