通配符的行为是否不同?
Does wildcard characters behave differently?
我想了解通配符的行为是否相同,例如:
1) 在 unix 提示符下,如果我键入 ls *.xml
,则它会列出所有以 .xml
结尾的文件,例如:1.xml, first.xml
等
--> 因此,* 匹配任何字符。
2) 现在,我试图在文件中使用 grep
查找一些文本,我执行了以下命令:
grep -i "*.xml" first.txt
令我非常惊讶的是,没有返回任何结果,即使 first.txt
的内容如下:first.xml
、second.xml
.
如果我这样做 grep -i "xml" first.xml
,那么我会得到结果。
此行为导致混淆,*
如何匹配案例 (1) 和案例 (2) 中的任何文本失败?
这在不同情况下表现是否不同,如果有,在哪里可以找到此信息。
Shell 使用 globbing。 https://en.wikipedia.org/wiki/Glob_(programming)
Grep 使用正则表达式。 https://en.wikipedia.org/wiki/Regular_expression
它们是两种不同的语言,对于 grep,*
不是通配符。表示前一个字符,重复零次或多次
你想要
grep '.*\.xml'
表示 任何字符 (.
) 重复零次或多次 (*
) 后跟文字 '.' (\.
)xml
(出于实际目的,您当然可以使用 fgrep .xml
或 grep '\.xml$'
)
我想了解通配符的行为是否相同,例如:
1) 在 unix 提示符下,如果我键入 ls *.xml
,则它会列出所有以 .xml
结尾的文件,例如:1.xml, first.xml
等
--> 因此,* 匹配任何字符。
2) 现在,我试图在文件中使用 grep
查找一些文本,我执行了以下命令:
grep -i "*.xml" first.txt
令我非常惊讶的是,没有返回任何结果,即使 first.txt
的内容如下:first.xml
、second.xml
.
如果我这样做 grep -i "xml" first.xml
,那么我会得到结果。
此行为导致混淆,*
如何匹配案例 (1) 和案例 (2) 中的任何文本失败?
这在不同情况下表现是否不同,如果有,在哪里可以找到此信息。
Shell 使用 globbing。 https://en.wikipedia.org/wiki/Glob_(programming)
Grep 使用正则表达式。 https://en.wikipedia.org/wiki/Regular_expression
它们是两种不同的语言,对于 grep,*
不是通配符。表示前一个字符,重复零次或多次
你想要
grep '.*\.xml'
表示 任何字符 (.
) 重复零次或多次 (*
) 后跟文字 '.' (\.
)xml
(出于实际目的,您当然可以使用 fgrep .xml
或 grep '\.xml$'
)