这个Sed命令究竟是如何工作的?

时间:2013-08-27 23:07:23

标签: regex bash sed terminal

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

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

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

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

起初,我对@符号感到困惑,但我现在最好的猜测是它是正则表达式的一部分。

让我感到困惑的是无法确定它是如何显式工作的,而我在手册中找到的最接近的匹配语法是s/regexp/new/,它仍然与命令的语法不匹配。

1 个答案:

答案 0 :(得分:4)

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

但是你的命令可以简化一点:

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

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