特定の行の下に情報を追加する

特定の行の下に情報を追加する

ファイルの特定の行の下に情報を含むファイルを追加する方法を知りたいです。

file1.txtたとえば、次の行があります。

line 1
line 2
line 3

そして、特定の場所にfile2.txt追加したい情報があります。file1.txtline 2

これについて何をすべきですか?

答え1

SedのR[ead]コマンドの使用

あなたはsedを使用することができますrコマンドファイルをお読みください。たとえば、行番号に基づいて行を一致させるには、次のようにします。

sed '2 r /tmp/file2.txt' /tmp/file1.txt

またはコンテンツごとに行を一致させたい場合:

sed '/^line 2/ r /tmp/file2.txt' /tmp/file1.txt

これはGNU拡張に依存しない標準コマンドなので、さまざまなsed実装で動作する必要があります。

上記のコマンドは、標準出力に結果を出力します。ソースファイルを変更するには、-isedの後にこのオプションを追加します(このオプションはLinuxおよびCygwinでは機能しますが、すべてのUNIXシステムでは機能しません)。

答え2

また、次の方法sedでこれを実行できますawk

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt

file2.txtこれにより、すべてのline 2出会いが挿入されます。

これが1基本ブロックです{ print $0 }

これにより、出力が標準出力に送信されます。上書きするには、file1.txt出力を一時ファイルに保存して上書きします。

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt > file1.txt.tmp
mv file1.txt.tmp file1.txt

編集する

固定文字列の一致を==より安定的に実行するには(たとえば、上記の文字列の一致)、次の条件を使用します。

awk '1; $0 == "\"zend_extension=/usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so\"" { while(getline < "file2.txt") print }' file1.txt

これを行うには、行全体が一致する必要があります。

関連情報