多行逐行添加到 vim
Multiple lines added to vim line by line
能否通过 vim 脚本通过 bash 脚本将多行 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
我想要做的是,从第 3 行开始,在 output_file.txt
中逐行添加行,而不是在第 3 行中一个接一个地添加行。
这更像是 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
与 ex
或 ed
如果 available/acceptable。
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 -c "3 s/^/add-this-line1\radd-this-line2\radd-this-line3\r/" -c "wq" /var/www/html/webserver/output_file.txt
能否通过 vim 脚本通过 bash 脚本将多行 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
我想要做的是,从第 3 行开始,在 output_file.txt
中逐行添加行,而不是在第 3 行中一个接一个地添加行。
这更像是 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
与 ex
或 ed
如果 available/acceptable。
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 -c "3 s/^/add-this-line1\radd-this-line2\radd-this-line3\r/" -c "wq" /var/www/html/webserver/output_file.txt