对我来说,使用sed真的很常见.我曾经有过's/pattern1/pattern2/g'.
有人可以帮我解释一下吗?
输入字符串如下所示:
path1/path2/path3/fileA path1/path2/path3/fileB path1/path2/path3/fileC
Run Code Online (Sandbox Code Playgroud)
输出是fileA fileB fileC.
kfs*_*one 12
它是一个替换命令,使用','而不是'/'作为分隔符 - 可能是因为模式中有'/'.它相当于
s/^.*\///
Run Code Online (Sandbox Code Playgroud)
它表示删除从行首到最后正斜杠的所有内容.
当您使用's'时,下一个字符将用作分隔符.所以你也可以把它写成
s!^.*/!!
s@^.*/@@
Run Code Online (Sandbox Code Playgroud)
等等
使用不同的分隔符可以节省您必须在模式中转义分隔符的实例.
您的示例输入:
路径1 /路径/ path3时/的fileA
' ^'表示'从字符串的开头',' .*'表示'匹配任何'''贪婪',所以它试图匹配尽可能多的字符串.' .*/'试图贪婪地匹配任何东西,只要它跟着'/'.因为它很贪婪,包括其他斜线.所以它匹配path1/path2/path3/.替换模式是'',即什么都没有,所以它有效地删除了从字符串的开头到最后的'/'的所有内容,只留下了fileA
TL; DR:表示"删除路径信息并只留下文件名"