複数行のテキストファイル内で複数行のテキストファイルを1つ見つけて置き換える

複数行のテキストファイル内で複数行のテキストファイルを1つ見つけて置き換える

私は長い間その問題に苦しんでいましたが、今は完全にアイデアはありません。たぶんここで誰かが私を助けることができます。これが私が達成したいものです:

file_1.txt:

# Some comment
some_variable="test"
some other things

# Marker

More things!@#$%^

file_2.txt:

# Marker
# Some other comment
other_variable_1="test"

# Some totally other comment
other_variable_2="test"

代わりfile_2.txtにに挿入して後でプロセスを元に戻したいと思います。file_1.txt# Marker

最終文書file_1.txt:

# Some comment
some_variable="test"
some other things

# Marker
# Some other comment
other_variable_1="test"

# Some totally other comment
other_variable_2="test"

More things!@#$%^

問題は、両方のファイルが複数行になっており、さまざまな特殊文字が含まれていることです。また、これら2つのファイルを変数に入れたいと思います。

私はsed、Perl、awkなど様々なものを試しました。私には何も効果がありません。私はこれが私の最も近い試みだと思います。

perl -pi -e 'chomp if eof' file_2.txt
marker_var="# Marker"
file_2_var=$(tr '\n' '\f' <file_2.txt)

sed -e "s|$marker_var|$file_2_var| tr '\f' '\n'" file_1.txt

まだ動作していないので、最も近いと言います。 stackexchangeのさまざまな答えを組み合わせてみましたが、正しく終了しないというエラーが発生しますs。私はファイルの最後の新しい行が原因であると思われ、\nperlコマンドを使用して削除しようとしましたが、うまくいきませんでした。

誰でも私を助けることができますか?

ベストアンサー1

すでにPerlがある場合は、Perlを実行してください。

open(f1,"<file_1.txt");
open(f2,"<file_2.txt");
open(out,">new_file_1.txt");

while(<f1>) {
   last if /# Marker/;
   print out;
}
print out while(<f2>);
print out while(<f1>);

close(out);
close(f1);
close(f2);

おすすめ記事