在bash脚本中调用vim的搜索和替换函数

Sri*_*ram 1 vim bash replace

我有一个(> 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)

在每个文件中,我需要进行的更改是相同的.我的问题是:

  1. 我可以vim通过在bash脚本中调用它来使用搜索和替换功能吗?

  2. 如果是这样,我该怎么做呢?

PS:我搜索了SO以获得一些回复,并找到了一些答案,如ex脚本等.我想知道如何exbash脚本中调用脚本.

mat*_*tr- 5

虽然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先前发布的命令以转换文件的方式希望它被改造.