我把这个文件放在一个名为test.php的目录中,其内容低于
< ? php $XZKsyG=’as’;
我想通过基于其内容的搜索来获取文件test.php。所以从包含它的目录我做:
grep 'php \$[a-zA-Z]*=.as.;'
然而我没有结果......我做错了什么?
由于
答案 0 :(得分:1)
这对我来说很好,不过你可能想看看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脚本组成的文件名: - )< / p>
答案 1 :(得分:1)
它对我有用:
$ cat file
< ? php $XZKsyG=’as’;
$ grep 'php \$[a-zA-Z]*=.as.;' file
< ? php $XZKsyG=’as’;
您确定该文件的内容正是您向我们展示的内容吗?
尝试cat -A file
或od -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
命令的输出是什么?