我试图使用regex来匹配/之前的所有内容,但是当我尝试以下操作时,没有输出任何内容。我仔细检查了我的正则表达式,看起来很好,但不知道为什么它不起作用。。

[user@user my_dir]$ tar -tf abc_de123_01.02.03.4.tgz | grep -m1 /
abc_de123_01.02.03.4/abcde.ini
[user@user my_dir]$ tar -tf abc_de123_01.02.03.4.tgz | grep -m1 .*\/
[user@user my_dir]$ tar -tf abc_de123_01.02.03.4.tgz | grep -m1 /$

expected output:
abc_de123_01.02.03.4/

最佳答案

这里有三个问题。
一个问题是*对shell有特殊的意义;如果运行echo grep -m1 .*\/,您将看到shell正在以您不期望的方式展开.*\/
一个问题是grep默认打印匹配的行。如果希望它只打印行的匹配部分,则需要-o标志。
有一个问题并没有真正破坏您的命令,但您仍然应该修复它,那就是您的shell使用\作为引号(转义)字符,所以\/实际上意味着/。(这不会破坏任何东西的原因是/对grep来说并不是特别的,所以您实际上不需要\来处理任何事情。)
所以:

grep -m1 -o '.*/'

它找到包含/的第一行,并打印该行上最后一行的所有内容。
顺便说一下,/不是反斜杠,只是斜杠(有时是正斜杠)。反斜杠是/

关于regex - 正则表达式试图在反斜杠之前匹配所有内容/不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37151024/

10-13 05:14