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