了解定位命令正则表达式

了解定位命令正则表达式

要将locate命令与正则表达式一起使用,我们是否需要将模式括在引号中并传递--regex选项?如果是,那么以下是什么意思 -

A)locate --regex file*?这里会发生正则表达式还是 shell 通配符?

b) locate 'file*'?即使我们没有通过,也会定位进行正则表达式搜索吗--regex

c) locate file* // 我知道会发生 shell 通配符

d) locate --regex 'file*'// 我知道正则表达式搜索将在数据库文件中进行

答案1

您可以在 shell 提示符下键入命令。 shell 处理您输入的内容,包括通配符、替换变量、替换$()等。处理完您输入的内容后,shell 会执行该命令。

如果字符串包含 shell 特有的字符(例如空格或星号),但您不希望 shell 处理它们,则需要使用引号。如果当前目录中没有匹配的文件,您将无需引用星号即可逃脱,但无论如何引用它都是一个好习惯。

重要的是要了解该--regex选项对 shell 的操作没有影响。首先,shell 处理您键入的命令。locate得到该处理的结果。

a) 如果当前目录中有匹配的文件file*,shell将替换file*为这些文件的列表打电话之前locate。如果没有匹配项,shell 将不会接触file*,并会查找名为filefilee等的文件fileee。简而言之,shell 尝试进行通配,locate如果 shell 的通配产生正确的语法,则执行正则表达式搜索。

b) 引号告诉 shell 保留星号。locate将查找以 . 开头的文件file。没有正则表达式搜索。

c) shell 尝试像 a) 中那样进行通配。如果没有匹配,locate将查找以file.没有正则表达式搜索。

d) shell 不考虑表达式。locate将执行正则表达式搜索并查找名为filefilee等的文件fileee

相关内容