パターンに一致する複数のファイルの行を別のファイルの行に順次置換

パターンに一致する複数のファイルの行を別のファイルの行に順次置換

複数のファイルのパターンに一致する行を別のファイルから順番に変更したいと思います。構造は最大500個のtxtファイルです。 Test1.txt、Test2.txt、Test3.txt...

11111
22222
mock
55555
77777

したがって、ファイルを1つずつ読み、最初のtest1.txtファイルの模擬行をmock.txtファイルの最初の行に置き換え、2番目のtest2.txtファイルの模擬行をmock.txtファイルに置き換えたいと思います。 in の構造は次のとおりです。

シミュレーション.txt

randomText1
randomText2
randomText3
randomText4
randomText5

フォルダの最後の.txtファイルまで続行されます。

ベストアンサー1

GNU sedでは、次のことができます。

cat mock.txt | sed -i -e '/mock/{R/dev/stdin' -e 'd;}' test{1..3}.txt

R読み取りと挿入のためのGNU固有のコマンド一つrすべてを挿入する標準オプションとは異なり、一度に1行ずつ。

$ head test{1..3}.txt
==> test1.txt <==
11111
22222
randomText1
55555
77777

==> test2.txt <==
11111
22222
randomText2
55555
77777

==> test3.txt <==
11111
22222
randomText3
55555
77777
R filename

現在のサイクルの終わりまたは次の入力行を読み取るときに読み取るファイル名行を出力ストリームにキューに追加して挿入します。ファイル名を読み取れない場合、または末尾に達した場合、行は追加されず、エラー表示も表示されません。

rコマンドと同様に、ファイル名は標準入力から1行を読み取る特別な値/ dev / stdinをサポートします。

この場合、ファイルから直接行を読み取ることは機能しません/mock/R mock.txt。なぜなら、オプションはオプションを-i暗示するので、-s最初の行がmock.txt各ファイルに挿入されるからです。

おすすめ記事