我有预感,我应该使用ack或egrep代替,但我应该用什么基本上寻找
<?
在文件的开头?我正在尝试查找包含php短开标记的所有文件,因为我将一堆遗留脚本迁移到具有最新php 5的相对较新的服务器。
我知道正则表达式可能是'/^<\?\n/'
答案 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行匹配。