我有一个(> 100)个文件,我想用vim处理.示例文件的文本包含以下内容(仅示例):
xyz.csv /home/user/mydocs/abc.txt
/home/user/waves/wav.wav , user_wav.wav
Run Code Online (Sandbox Code Playgroud)
我希望将其替换为:
xyz.csv /var/lib/mydir/abc.txt
/var/sounds/wav.wav , wav.wav
Run Code Online (Sandbox Code Playgroud)
在每个文件中,我需要进行的更改是相同的.我的问题是:
我可以vim通过在bash脚本中调用它来使用搜索和替换功能吗?
如果是这样,我该怎么做呢?
PS:我搜索了SO以获得一些回复,并找到了一些答案,如ex脚本等.我想知道如何ex从bash脚本中调用脚本.
虽然vim非常强大,但我通常不会使用vim.它可以使用常见命令行实用程序的组合来完成.
我假设上面示例中的空白行实际上是空白的,并且不包含空格或任何其他空白字符.您可以使用以下方法执行您想要的操作.
sed -e "s,/home/user/mydocs,/var/lib/mydir," -e "s,/home/user/waves,/var/sounds," -e "/^$/d" file1
Run Code Online (Sandbox Code Playgroud)
您可以将该命令与findfor循环一起使用来为一堆文件执行此操作:
for file in `find . -maxdepth 1 -type f`
do
sed -e "s,/home/user/mydocs,/var/lib/mydir," -e "s,/home/user/waves,/var/sounds," -e "/^$/d" $file
done
Run Code Online (Sandbox Code Playgroud)
在for循环中,上面的find命令将输出限制为当前目录中的所有文件(包括点文件),将find的输出中的每一行分配给file变量,然后运行sed先前发布的命令以转换文件的方式希望它被改造.