grep - поиск "<? \ n" в начале файла - PullRequest
0 голосов
/ 07 октября 2009

У меня есть догадка, что я, вероятно, вместо этого должен использовать ack или egrep, но что я должен использовать, чтобы в основном искать

<?

в начале файла? Я пытаюсь найти все файлы, которые содержат короткий открытый тег php, поскольку я перенес несколько устаревших сценариев на сравнительно новый сервер с последней версией php 5.

Я знаю, что регулярное выражение, вероятно, будет '/^<\?\n/'

Ответы [ 6 ]

6 голосов
/ 07 октября 2009

Я RTFM и в итоге использовал:

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

аргумент P включил полные Perl-совместимые регулярные выражения.

4 голосов
/ 07 октября 2009

Если вы ищете все короткие теги php, используйте негативный взгляд

/<\?(?!php)/

будет соответствовать <?, но не будет соответствовать <?php

[meder ~/project]$ grep -rP '<\?(?!php)' .
2 голосов
/ 13 марта 2013
find . -name "*.php" | xargs  grep -nHo "<?[^p^x]"

^ x для исключения начального тега xml

1 голос
/ 07 октября 2009

, если вы беспокоитесь о концах строк Windows, просто добавьте \r?.

0 голосов
/ 07 октября 2009

Вы имеете в виду буквальный "обратный слэш n" или новую строку?

Для бывших:

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

Для последнего:

grep '^<?$' [files]

Обратите внимание, что grep будет искать все строки, поэтому, если вы хотите найти совпадения только в начале файла, вам нужно либо отфильтровать каждый файл до его первой строки, либо попросить grep распечатать номера строк и тогда ищите только совпадения по строке 1.

0 голосов
/ 07 октября 2009
grep '^<?$' filename

Не знаю, правильно ли это отображается. Должно быть

grep '^ <? $ 'filename </p>

...