1

我想使用 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。

4

3 回答 3

4

awk

awk 'NR>2{while((getline a < "sample.txt") > 0){print a}}1' input.txt

解释:

  • NR内置存储行号的awk变量。当我们设置一个条件时,NR>2action条件后面的条件只有在它为真时才会执行。也就是说,另一个文件的行只会在主文件的第二行之后开始显示。
  • 如果捕获到行,则函数的返回值为getline1,如果到达文件末尾,则返回 0。
  • 使用while(..)循环getline意味着继续这个循环,直到整个文件被getline它获取print
  • 最后1的 基本上是一个非零值,告诉awk执行它的默认操作是print.
于 2013-06-06T10:34:33.457 回答
3

这可能对您有用(GNU sed):

sed '2rsample.txt' input.txt >output.txt
于 2013-06-06T09:23:36.630 回答
0

使用

内容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
于 2013-06-06T09:27:18.223 回答