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