Почему я не могу обнаружить этот файл? - PullRequest
1 голос
/ 24 ноября 2011

У меня есть этот файл в каталоге, скажем test.php, содержимое которого ниже

< ? php $XZKsyG=’as’;

Я хочу подобрать файл test.php с поиском по его содержимому. Итак, из каталога, содержащего его, я делаю:

grep 'php \$[a-zA-Z]*=.as.;' 

Однако я не получаю результата ... что я делаю не так?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Это работает для меня:

$ cat file
< ? php $XZKsyG=’as’;
$ grep 'php \$[a-zA-Z]*=.as.;' file
< ? php $XZKsyG=’as’;

Вы уверены, что содержимое файла именно то, что вы показали нам?

Попробуйте cat -A file или od -c file, чтобы увидеть,Файл действительно выглядит так, как вы думаете.

(Обратите внимание, что вам не нужно экранировать символ $; это только метасимвол в конце строки. Но экранирование должно быть в порядке.)

РЕДАКТИРОВАТЬ:

Символы вокруг as в вашем файле не являются апострофами ASCII;это символы Юникода, ПРАВАЯ ЕДИНСТВЕННАЯ МАРКА ЦИТАТЫ (0x2019).Если файл хранится в UTF-8, каждый из них представляется в виде 3-байтовой последовательности.Команда grep работает для меня, потому что мои настройки локали "en_US.UTF-8" таковы, что символ UTF-8 соответствует . в регулярном выражении, даже если он имеет многобайтовое представление.Я подозреваю, что ваш языковой стандарт таков, что он будет соответствовать ....

Возможно, самое простое решение - отредактировать файл для использования апострофов ASCII.

Возможно, вы захотите поигратьваши настройки локали.Попробуйте команду grep с $LANG, установленным на "en_US.UTF-8".

Каков вывод команды locale?

1 голос
/ 24 ноября 2011

Это прекрасно работает для меня, хотя вы можете захотеть взглянуть на эти "забавные" одиночные кавычки, которые у вас есть около as:

pax$ cat testfile
< ? php $XZKsyG='as';

pax$ grep 'php \$[a-zA-Z]*=.as.;' testfile
< ? php $XZKsyG='as';

В противном случае есть некоторые вещи, на которые вы можете посмотреть.Некоторые из них могут показаться глупыми, но я просто проверяю все базы.

  • Вы уверены, что файл содержит только то, что, по вашему мнению, он делает?Выполнение od -xcb file даст вам шестнадцатеричный дамп для лучшей проверки.
  • Вы уверены, что получаете доступ к нужному файлу в правильном каталоге?
  • Вы сделали что-то глупое, какпсевдоним grep может быть чем-то другим?

Это если вы ищете файл, содержащий эту строку.Если вместо этого вы ищете файл с именем и тому подобное, вы можете использовать что-то вроде:

ls -1 | grep 'php \$[a-zA-Z]*=.as.;'

Команда ls -1 дает вам один файл на строку и передает его черезgrep отфильтрует тех, кто не соответствует шаблону.

Полагаю, я должен упомянуть, что я не очень большой поклонник имен файлов с пробелами в них, но я яростно в отличие от имен файлов, составленных из скриптов PHP: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...