ls -l ab*
find . -name “abc*”
这里的*都是shell的文件通配符,包括 * ? []
首先文件通配符和正则表达式含义是不同的。最大的差别在于:
1."*" 在正则表达式中表示前面的字符重复任意次数,所以表示任意字符串".*", shell通配符中* 就表示任意字符串
2. ".“在正则表达式中是任意一个字符,在通配符中没有其他任何含义,在通配符中”?"表示一个任意的字符
shell 本身会对*进行解析,所以如果不希望shell解析"*", 就一定要把通配符用双引号括起来(单引号使用后,就什么都替换不了)
ls -l ab* 这个*由shell来解析的,假如目录下面有ab1 abc ab2, 那这个命令首先会被shell转化为ls -l ab1 abc ab2。 ls本身没有解析通配符的能力。
ls -l “ab*”, 那就会什么都没有,因为没有一个文件的名字是ab*
find . -name "abc*"这个参数会原封不动的传给find, find命令本身具备解析通配符的能力,会在当前目录下面的各级目录下面寻找以abc开头的文件。
find . -name abc* 那通配符会被shell解析,如果当前目录下没有以abc开头的文件,那传给find命令的就是空的,相当于:
find . -name
find: missing argument to `-name’
如果当前目录下游多个abc开头的文件,会出错,相当于:
find . -name abc1 abc2
find: paths must precede expression: abc2 就是说第二个name前面没有指定寻找的路径,
如果当前目录下面只有一个abc开头的文件,那就不会出错,但是相当于:
find . -name abc1
最终最在所有的目录下面搜索abc1的文件,和我们的本意大相径庭。
记住,-name选项搜索的是basename,不要再里面带"/"
再提一下grep. grep [-option] pattern file
这里的pattern是正则表达式,必须用双引号 括起来,否则被shell解析。file部分没有pattern,所以grep自己的文件是没有解析能力的,file里面如果有通配符,必须由shell解析,可见得文件部分的通配符必须没有双引号。
grep -i “main.*hello” .c
在当前的目录下的所有的c源文件中搜索同时含有main和hello的语句
shell本身的文件通配符解析的能力比较弱,只对当前目录下的文件有效。
要想对多层目录有效:
grep -r ‘hello’ /home/gigi
但是这个不能指定文件的名称,再指定文件名称的pattern
find /home/gigi -name '.c’ -print0 | xargs -0r grep -H ‘hello’
grep -rH --include=’*.c’ ‘hello’ /home/gigi
---------------------
作者:hardcareer
来源:优快云
原文:https://blog.youkuaiyun.com/hardcareer/article/details/89024352
版权声明:本文为博主原创文章,转载请附上博文链接!
问:
ls后面的对象如果加了双引号,*就变成了普通字符。 SUSE11SP1_MWQ_TEST1:/test # ls test* test test1 test10 test2 test3 test5 test6 test7 test8 test9 SUSE11SP1_MWQ_TEST1:/test # ls "test*" ls: cannot access test*: No such file or di...
答:
首先记住一点, 不加引号的 * 首先会被bash进行扩展,所以 ls test* 在执行 ls 命令前,bash先把 test* 替换成了 test1 test2 ... 然后 ls 命令看到的参数实际上是 test1 test2 ..., 加了引号,bash就不去做替换了,那么 ls 命令看到的参数就是 test*
同理, find 命令看到的参数是 -name test* 还是 -name test1 test2 ... 是有你是否给*加引号决定的。特别注意一点, find 命令的 -name 后面的参数是支持 * 做通配符的 (当然此时你要让find能收到命令参数中的*,所以必须加引号确保*不被bash预先扩展掉),这是 find 命令自带的功能。其他命令可能并不支持,比如ls就不支持。
搞清楚 * 到底是在什么时候被处理的,是你理解这个问题的关键。
---------------------
作者:sunxiaopengsun
来源:优快云
原文:https://blog.youkuaiyun.com/sunxiaopengsun/article/details/72764718
版权声明:本文为博主原创文章,转载请附上博文链接!