我是脚本的新手,我想在gvim中的生成文件中进行列编辑。
问题是我知道如何在单个文件中执行此操作(通过在gvim中进入可视块模式),但是我必须对多个文件进行相同的编辑,并且无法打开每个文件并执行所需的操作每个文件中的操作。
是否有任何脚本语言提供了这样做的方法?
编辑1:我必须用另一文本替换整个列。
答案 0 :(得分:0)
设置输入和输出示例非常好,但是现在我会提出类似的内容:
"TemplateData": `{ \"subject\": \"${createdData.subject}\", \"date\": \"${createdData.date}\", \"header\": \"${createdData.header}\", \"message\": \"${createdData.message}\" }`
答案 1 :(得分:0)
请尝试备份您的文件。
很难描述文件内容,但假设它是用空格分隔的文件,则可以使用vim
来更改第一列(每行的第一个单词),而无需手动操作打开每个文件,请从shell提示符中尝试以下操作:
for fname in * ; do vim -N -c ":%s/\v^\w+/NEWTEXT/g|:wq" "${fname}" ; done
其中:
*
是Shell Glob,表示“所有文件”。如果您的文件不位于单独的目录中,或者您不想影响所有文件,请提供for fname in file1 file2 file3...
NEWTEXT
是替代文本。-c
在启动时执行vim
命令:
在vim
中进入命令模式%
使整个文件成为操作的对象s/REGEXP/SUBSTITUTION/g
表示在所有与REGEX匹配的字符串中插入SUBSTITUTION \v
使vim
正则表达式中的转义符和特殊字符的行为类似于POSIX正则表达式。^
的意思是“从行首” \w
的意思是“任何单词字符” +
的意思是“前面的一个或多个字符” |
分隔vim
个命令(不是 一个Shell管道):wq
保存更改的文件并退出vim
以这种方式使用vim
可能不是最好的主意。
考虑使用改为sed
for fname in * ; do
sed -ir "s/^\w+/NEWTEXT/g" "${fname}"
done
-r
标志告诉sed
使用正则表达式
-i
告诉它在适当的位置更改文件,即不需要输出重定向。