基本上,我想将./foo/bar
转换为./foo/bar/bar
。我最初尝试过sed,但我想出的正则表达式使用了lookaround((?<=s\/)(.*)
)或\K
转义序列(.*\/\K.*
),这是sed不支持的。
答案 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
这会捕获每行上最后/
之后的所有内容,并将斜杠和捕获的序列附加到该行的末尾。