1行を2番目のファイルのフルテキストに置き換えます。 [重複]

1行を2番目のファイルのフルテキストに置き換えます。 [重複]

sed.

では、例を挙げましょう。次のファイルがありますfile1.txt

A 1
B 2
C 3

2番目のファイルがありますfile2.txt

line 1
line 2
line 3

line 2今の内容全体をに変更しようとしているので、file1.txt最終的には次のようになります。

line 1
A 1
B 2
C 3
line 3

私が考えることができる1つの方法は次のとおりです。

sed -i "s/line 2/$(cat file1.txt)/g" file2.txt. 

/しかし、その後、moreなどの特殊文字も確認する必要があります。読むことができるすべての文字は で見つけることができると仮定する必要がありますfile1.txt

それでは私の質問に戻ります。ファイルの1行を2番目のファイルの内容全体に置き換える簡単な方法はありますか?必ずしもそうではありませんsed。仕事をより良くするなら、別のツールになるかもしれません...

ベストアンサー1

sed -e '/^line 2$/{r file1.txt' -e 'd;}' file2.txt

スクリプトsed

/^line 2$/{
    r file1.txt
    d
}

ファイル名の後の改行は必須であるため、コマンドラインからfile1.txt別の式に分割すると読みやすくなります。-e

sed '/^line 2$/{r file1.txt
d;}' file2.txt

スクリプトは内容のある行を探しますline 2。これが見つかったらfile1.txtすぐに内容を出力し、元の行を削除します。

を使用するとsed -iインラインに変更されますfile2.txt(推奨されません)。

おすすめ記事