grep - 在文件开头搜索“<! - ?\ n” - >

时间:2009-10-07 17:44:50

标签: regex ack grep

我有预感,我应该使用ack或egrep代替,但我应该用什么基本上寻找

<?

在文件的开头?我正在尝试查找包含php短开标记的所有文件,因为我将一堆遗留脚本迁移到具有最新php 5的相对较新的服务器。

我知道正则表达式可能是'/^<\?\n/'

6 个答案:

答案 0 :(得分:6)

我是RTFM并最终使用:

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

P参数启用了完全perl兼容的正则表达式。

答案 1 :(得分:4)

如果您正在寻找所有php短标签,请使用negative lookahead

/<\?(?!php)/

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

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

答案 2 :(得分:2)

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

^ x排除xml开始标记

答案 3 :(得分:1)

如果您担心Windows行结尾,只需添加\r?

答案 4 :(得分:0)

grep '^<?$' filename

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

grep'^&lt; ? $'filename

答案 5 :(得分:0)

你的意思是文字“反斜杠n”还是指换行?

对于前者:

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

对于后者:

grep '^<?$' [files]

请注意,grep将搜索所有行,因此如果您想在文件的开头找到匹配项,则需要将每个文件过滤到第一行,或者要求grep打印出行号和然后只查找第1行匹配。