命令是什么意思? sed's,^。* / ,,'

时间:2013-11-05 08:22:46

标签: sed

对我来说,使用sed真的很常见。我习惯's/pattern1/pattern2/g'

有人可以帮我解释一下吗? 输入字符串如下所示:

path1/path2/path3/fileA path1/path2/path3/fileB path1/path2/path3/fileC

输出为fileA fileB fileC

1 个答案:

答案 0 :(得分:12)

这是一个替换命令,使用','而不是'/'作为分隔符 - 可能是因为模式中有'/'。它相当于

s/^.*\///

表示删除从行首到最后正斜杠的所有内容。

当您使用's'时,下一个字符将用作分隔符。所以你也可以把它写成

s!^.*/!!
s@^.*/@@

使用不同的分隔符可以省去模式中分隔符的实例。

您的示例输入:

路径1 /路径/ path3时/的fileA

'^'表示'从字符串的开头','.*'表示'匹配任何''贪婪',因此它会尝试尽可能多地匹配字符串。 '.*/'试图贪婪地匹配任何东西,只要它后跟一个'/'。因为它很贪婪,包括其他斜线。所以它匹配path1/path2/path3/。替换模式是'',即什么都没有,所以它有效地删除了从字符串开头到最后一个'/'的所有内容,只剩下fileA

TL; DR:表示“删除路径信息并只留下文件名”