首页 > 解决方案 > 从每行中的每个文件路径中提取文件名并添加到它旁边

问题描述

鉴于我在文件中的文本:

/home/dir1/file1.txt
/home/dir2/file2.txt
...
/home/dirn/filek.txt

我希望它是这个文本:

/home/dir1/file1.txt file1
/home/dir2/file2.txt file2
...
/home/dirn/filek.txt filek

我可以用vim写这个吗?

标签: vim

解决方案


此正则表达式有效:

:%s#.*/\(.*\)\.txt$#& \1#

开始.*/会跳过所有内容,直到最后一个斜杠(它很贪婪,所以它会捕获所有目录部分。)

然后我们在一个组中捕获文件名\(.*\)

最后,我们将扩展匹配\.txt并锚定到行尾。

对于替换,我们使用 a&来保留完整路径,然后添加\1以仅包含文件名。

我们可以#用作分隔符,所以我们不需要转义/s。我们这里只有一个,但是当涉及到路径时,这是一种有用的技术,所以我确保在这里使用它是为了保持一致性。

您可能想查看:help pattern-searches以了解有关可用于搜索和替换的 Vim 正则表达式的更多信息。

(一般来说,Vim 文档很棒,如果您知道如何浏览它,帮助系统会非常有用,请参阅:help helphelp更多信息。)


推荐阅读