gog*_*lla 4 apt bash regex perl apt-file
我想找到所有提供文件名中包含“ssl”的共享对象的包。在易文件手册页说:
--regexp | -x 将模式视为 (perl) 正则表达式。有关详细信息,请参阅 perlreref(1)。如果没有此选项,模式将被视为要搜索的文字字符串。
因此我的第一次尝试是
apt-file search --regexp .*ssl.*\.so.*
Run Code Online (Sandbox Code Playgroud)
然而,这给了我这样的结果
机智的例子:/usr/lib/Wt/examples/feature/client-ssl-auth/resources
文件名中没有“.so”。
我玩了一下,想出了
apt-file search --regexp .*ssl.*\\.so.*
Run Code Online (Sandbox Code Playgroud)
即我逃脱了应该逃脱点的反斜杠。这给了我想要的结果。
有人可以解释为什么在这种情况下我需要双反斜杠吗?
您需要双反斜杠,\\因为单反斜杠不仅是正则表达式转义字符,也是您的 shell 使用的字符。例如,您对点进行转义,它在 shell 级别只是解释为常规点,然后将其传递给 apt-get 并匹配每个字符(就像常规点通常所做的那样)。
因此,答案是,首先将字符串由外壳,其中反斜杠只有一种含义的解释,以及之后的是,它被传递给apt-get的。apt-get 的正则表达式引擎然后再次解释预处理过的字符串。那里的反斜杠已被替换(并且含义也略有不同)。
另一种解决方案是将正则表达式放在引号中,如下所示:
apt-file search --regexp '.*ssl.*\.so.*'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1790 次 |
| 最近记录: |