多行逐行添加到vim

Posted

技术标签:

【中文标题】多行逐行添加到vim【英文标题】:Multiple lines added to vim line by line 【发布时间】:2021-12-29 15:07:14 【问题描述】:

你能帮忙通过 bash 脚本通过 vim 将多行 txt 添加到文件中吗?

我试过这个:

vim -c "3 s/^/
         add-this-line1
         add-this-line2
         add-this-line3/" -c "wq" /var/www/html/webserver/output_file.txt

但是,文件的输出是这样的:

3 add-this-line1 add-this-line2 add-this-line3 

我想要做的是,从output_file.txt 中的第 3 行,而不是在第 3 行一个接一个地添加行。

【问题讨论】:

如果你真的想用 vim 来做这件事,你可以在Vi and Vim问 您能添加一个所需输出的样本吗? 【参考方案1】:

这更像是 ed,IMO 的工作

seq 10 > file

ed file <<END_ED
3a
first
second
third
.
wq
END_ED

对于ed 的新手,带点的行表示“插入模式”的结束。

file 现在包含:

1
2
3
first
second
third
4
5
6
7
8
9
10

【讨论】:

首先谢谢你,这适用于普通文本。我正在尝试使用此方法将脚本插入另一个脚本,但 ed 在将其附加到另一个脚本之前执行该脚本,因此它写入完全不同的值。你知道我可以通过 ed 或任何其他工具将脚本添加到另一个脚本吗? 你需要确保 here-doc 被引用,这样 shell 就不会碰到它。这很容易做到:引用 here-doc 中的“单词”,如下所示:ed file &lt;&lt; 'END_ED'——这就是您需要做的所有事情。 格伦杰克曼,非常感谢您,先生像梦一样工作!你拯救了我的一天......我是 bash/linux 的新手,我花了相当多的时间来解决这个问题,但我做不到。再次,非常感谢你!【参考方案2】:

如果你真的想通过 vim 来做,我相信你需要在替换中插入新行:

vim -c "3 s/^/add-this-line1\radd-this-line2\radd-this-line3\r/" -c "wq" /var/www/html/webserver/output_file.txt

【讨论】:

【参考方案3】:

使用exed(如果可用/可接受)。

printf '%s\n' '3a' 'foo' 'bar' 'baz' 'more' . 'w output_file.txt' | ex -s input_file.txt

ex 替换为ed,它应该是相同的输出。


使用 bash 数组来存储需要插入的数据。

to_be_inserted=(foo bar baz more)

printf '%s\n' '3a' "$to_be_inserted[@]" . 'w output_file.txt' | ex -s inputfile.txt

再次将 ex 更改为 ed 应该做同样的事情。

如果需要就地编辑input 文件,则删除output_file.txt,只需保留w


虽然您似乎想从行号"3 s/^/开始的行首插入


给出运行创建的file.txt

printf '%s\n' 1..10 > file.txt

一点 shell 脚本就可以解决问题。

#!/usr/bin/env bash

start=3

to_be_inserted=(
 foo
 bar
 baz
 more
)

for i in "$to_be_inserted[@]"; do
  printf -v output '%ds/^/%s/' "$start" "$i"
  ed_array+=("$output")
  ((start++))
done

printf '%s\n' "$ed_array[@]" ,p Q | ed -s file.txt

输出

1
2
foo3
bar4
baz5
more6
7
8
9
10

如果需要就地编辑,请将 Q 更改为 w

如果您不想看到输出,请删除 ,p

【讨论】:

以上是关于多行逐行添加到vim的主要内容,如果未能解决你的问题,请参考以下文章

vim添加或删除多行注释

vim添加多行注释的几种方式

vim编辑器 批量添加多行注释,删除多行注释

vi/vim如何添加或删除多行注释

vim编辑器如何添加或删除多行注释

同时在多行中添加空格 - 在 Pycharm 中