【问题标题】:How exactly does this Sed command work?这个 Sed 命令究竟是如何工作的?
【发布时间】:2013-08-27 23:07:23
【问题描述】:
sed 's@.*/.*\.@.@'

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

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

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

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

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

【问题讨论】:

    标签: regex bash sed terminal


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太棒了,我现在几乎明白了逻辑。 sed 命令本质上是说“根据正则表达式查找扩展名之前的文本,将其替换为点”。非常感谢。我理解你的正则表达式,简单明了,除非我遗漏了什么,否则他们试图明确说明父目录是多余的(我认为......)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2020-08-21
    • 2018-01-04
    • 2021-01-27
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多