您能否通過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 行中的一行一行一行添加到第 3 行,而output_file.txt不是第 3 行。
uj5u.com熱心網友回復:
這更像是一份作業 編輯, 海事組織
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
uj5u.com熱心網友回復:
如果你真的想通過 vim 來做,我相信你需要在你的替換中插入新行:
vim -c "3 s/^/add-this-line1\radd-this-line2\radd-this-line3\r/" -c "wq" /var/www/html/webserver/output_file.txt
uj5u.com熱心網友回復:
有ex或ed如果可用/可接受。
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如果您不想看到輸出,請洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363002.html
