1

ファイルの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

ファイルの先頭または末尾ではなく、特定の位置に行を挿入する方法を教えてください。

UNIX を bash シェルで使用しています。

4

3 に答える 3

4

awk

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

説明:

  • NR行番号を格納する変数がawk組み込まれています。条件を入れると、その条件に続く条件は、それが true になったときNR>2actionのみ実行されます。つまり、別のファイルの行は、メイン ファイルの 2 行目以降にのみ表示されます。
  • 関数の戻り値はgetline、行がキャプチャされた場合は 1 であり、ファイルの終わりに達した場合は 0 です。
  • while(..)loop を with とともに使用するとgetline、ファイル全体が取得されるまでこのループが継続されます。getlineprint
  • 最後の1は基本的にゼロ以外の値awkであり、デフォルトのアクションである を実行するように指示しますprint
于 2013-06-06T10:34:33.457 に答える
0

を使用した 1 つの方法

の内容script.vim:

set backup
n
normal ggyG
N
normal 3GP
saveas output.txt
qa!

次のように実行します。

vim -S script.vim input.txt sample.txt

そして、output.txtwith コンテンツを作成します:

Apple
Orange
Sample data1
Sample data2
Cat
Dog
于 2013-06-06T09:27:18.223 に答える