1
sed 's@.*/.*\.@.@'

该命令是查找目录中所有文件扩展名的较大命令的一部分。

find . -type f -name '*.*' | sed 's@.*/.*\.@.@' | sort | uniq

我知道find返回所有带有扩展名的文件,我知道 sed 只返回扩展名,然后 sort/uniq 是不言自明的。

起初,我对这个@符号感到困惑,但我现在最好的猜测是它是 Regex 的一部分。

真正让我困惑的是无法弄清楚它是如何明确工作的,而我在手册中找到的最接近的匹配语法s/regexp/new/仍然与命令的语法不匹配。

4

1 回答 1

4

s/regexp/replacement/语法中,/可以用任何其他字符替换,例如,, :,@等。如果您的正则表达式本身包含字符,这非常有用/,例如您的示例.*/.*\.

不过,您的命令可以简化一点:

find . -type f -name '*.*' | sed 's/.*\././' | sort -u

在这里,我简化了正则表达式,使其不再包含/字符。

于 2013-08-27T23:09:06.360 回答