我想使用shell脚本在文件中的某个特定位置插入一些文本,例如在文件的第3行。
我有一个输入文件:
input.txt
---------
Apple
Orange
Cat
Dog
和另一个示例文件:
sample.txt
-----------
Sample data1
Sample data2
现在我的输出文件应该是:
output.txt
----------
Apple
Orange
Sample data1
Sample data2
Cat
Dog
我编写了一个脚本,但它只能放在文件的开头:
#!/bin/bash
if grep "Text exists..." "./input.txt"; then
echo exist
else
echo doesNOTexist
cat sample.txt >> output.txt
cat input.txt >> output.txt
fi
请帮助我如何在某个特定位置插入行而不是文件的开头或结尾。
我正在使用带有bash shell的UNIX。
答案 0 :(得分:4)
在awk
awk 'NR>2{while((getline a < "sample.txt") > 0){print a}}1' input.txt
NR
是awk
内置变量,用于存储行号。当我们将条件NR>2
放在后面的action
时,该条件只有在它为真时才会执行。也就是说,另一个文件的行只会在主文件的第二行之后开始显示。getline
函数的返回值为1,如果到达文件末尾,则返回0。 while(..)
循环与getline
一起使用将意味着继续此循环,直到使用getline
和print
获取整个文件。1
基本上是一个非零值,告诉awk
执行默认操作print
。 答案 1 :(得分:3)
这可能适合你(GNU sed):
sed '2rsample.txt' input.txt >output.txt
答案 2 :(得分:0)
使用vim
的一种方法 script.vim
的内容:
set backup
n
normal ggyG
N
normal 3GP
saveas output.txt
qa!
像以下一样运行:
vim -S script.vim input.txt sample.txt
它会创建一个内容为output.txt
的内容:
Apple
Orange
Sample data1
Sample data2
Cat
Dog