为什么我不能检测到这个文件?

时间:2011-11-24 04:13:50

标签: linux grep

我把这个文件放在一个名为test.php的目录中,其内容低于

< ? php $XZKsyG=’as’;

我想通过基于其内容的搜索来获取文件test.php。所以从包含它的目录我做:

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

然而我没有结果......我做错了什么?

由于

2 个答案:

答案 0 :(得分:1)

这对我来说很好,不过你可能想看看as周围那些“有趣”的单引号:

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

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

如果做不到,你可以看一些东西。其中一些可能听起来很愚蠢但我真的只是检查所有的基础。

  • 您确定该文件仅包含您认为的内容吗?执行od -xcb file将为您提供十六进制转储以便更好地进行检查。
  • 您确定在正确的目录中访问了正确的文件吗?
  • 你做过像ali grep别名的傻事吗?

如果您正在寻找包含该字符串的文件,那就是这样。如果你正在寻找一个名为的文件,你可以使用类似的东西:

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

ls -1命令为每行提供一个文件,通过grep的管道将过滤掉与模式不匹配的文件。

我想我应该提一下,我不是真的很喜欢带有空格的文件名,但我暴力反对用PHP脚本组成的文件名: - )< / p>

答案 1 :(得分:1)

它对我有用:

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

您确定该文件的内容正是您向我们展示的内容吗?

尝试cat -A fileod -c file,看看文件是否真的像您认为的那样。

(请注意,您不需要转义$字符;它只是行末尾的元字符。但是转义它应该没问题。)

编辑:

文件中as周围的字符不是ASCII撇号;它们是Unicode RIGHT SINGLE QUOTATION MARK字符(0x2019)。如果文件以UTF-8存储,则每个文件都表示为3字节序列。 grep命令对我有用,因为我的语言环境设置"en_US.UTF-8"使得UTF-8字符在正则表达式中与.匹配,即使它具有多字节表示。我怀疑你的语言环境是...匹配的。

可能最简单的解决方案是编辑文件以使用ASCII撇号。

您可能还想尝试使用区域设置。尝试grep命令,$LANG设置为"en_US.UTF-8"

locale命令的输出是什么?