如何提取基本名称并将其附加到路径

时间:2017-04-10 22:16:56

标签: regex bash perl sed

基本上,我想将./foo/bar转换为./foo/bar/bar。我最初尝试过sed,但我想出的正则表达式使用了lookaround((?<=s\/)(.*))或\K转义序列(.*\/\K.*),这是sed不支持的。

1 个答案:

答案 0 :(得分:3)

对于&#34;如何将/name附加到/path/to/name&#34;的一般情况,您可以使用参数扩展:

$ var='./foo/bar'
$ echo "$var/${var##*/}"
./foo/bar/bar

${var##*/}扩展为$var的值,其中*/的最长匹配(以斜杠结尾的任何内容)从其开头删除。

如果你有一个文件,每行有一个这样的条目,你可以用sed做这样的事情:

$ cat infile
./foo/bar
./foo/bar/baz
./path/to/file
$ sed 's/\([^/]*\)$/\1\/\1/' infile
./foo/bar/bar
./foo/bar/baz/baz
./path/to/file/file

这会捕获每行上最后/之后的所有内容,并将斜杠和捕获的序列附加到该行的末尾。