我有一个包含以下条目的文件:
folder1/a_b.csv folder1/generated/
folder2/folder3/a_b1.csv folder12/generated/
folder4/b_c.csv folder123/generated/
folder5/d.csv folder1/new_folder/generated/
folder6/12.csv folder/anotherfolder/morefolder/evenmorefolder/generated/
我想从每一行复制csv文件名,将它们粘贴在该行的末尾,并用“.org”附加它。因此,更改的文件看起来像
folder1/a_b.csv folder1/generated/a_b.csv.org
folder2/folder3/a_b1.csv folder12/generated/a_b1.csv.org
folder4/b_c.csv folder123/generated/b_c.csv.org
folder5/d.csv folder1/new_folder/generated/d.csv.org
folder6/12.csv folder/anotherfolder/morefolder/evenmorefolder/generated/12.csv.org
基本上,我正在寻找vim或sed中的命令,我可以搜索每行中的模式并将其附加到该行的末尾。有可能吗?
提前致谢。
答案 0 :(得分:4)
以下是在Vim中执行此操作的方法:
:%s/\([^/]*\.csv\)\( .*\)/&\1.org/
此全局(:%
)替换匹配文件名(不包含/
的字符,以.csv
结尾),并捕获{{1它。然后它匹配线的其余部分,并捕获它。
作为替代品,首先保留原始匹配\(...\)
(或&
),然后在第一个捕获(\0
)附加附加后缀。
虽然正则表达式语法与Vim略有不同,但相同的表达式可以与\1
一起使用:
sed
看起来您想要批量进行文件重命名。在Linux上,mmv command-line tool非常适合这种情况;你也可能在网上找到很多类似的工具。
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed -r 's|/([^ ]*) .*|&\1.org|' file