我试图使用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/