ab サブストリングで a を検索し、b を置き換えます。

ab サブストリングで a を検索し、b を置き換えます。

私のLinuxボックスには非常に大きなホストファイルがあります。

1.1.1.1  hostA hosta
1.1.1.2  hostB hostb
1.1.1.3  hostC hostc
1.1.1.4  hostD hostd
1.1.1.5  hostE hoste
1.1.1.6  hostF hostf
1.1.1.7  hostG hostg
.......

修正したい行がありますfile2

2.1.1.1 hostA hosta
2.1.1.2 hostB hostb 
2.1.1.3 hostC hostc 

したがって、希望の出力は次のようになります。

2.1.1.1  hostA hosta
2.1.1.2  hostB hostb
2.1.1.3  hostC hostc
1.1.1.4  hostD hostd
1.1.1.5  hostE hoste
1.1.1.6  hostF hostf
1.1.1.7  hostG hostg
.......

私はこれを次のように使用する方法を知っています。

sed '/hostA/ s/1.1.1.1/2.1.1.1/' hosts

forしかし、ループで使用する方法がわかりません。それともホストを修正する別のクイック方法はありますか?

ベストアンサー1

以下が使用されますミラーmlr)は、ファイルをヘッダーなしで「きれいに印刷された」データとして読み取り、各行の2番目と3番目のフィールドを結合キーとして使用して、ファイル間hostsの左結合操作を実行します。new

$ mlr --pprint -N join -j 2,3 -f hosts --ul then reorder -f 1,2,3 new
2.1.1.1 hostA hosta
2.1.1.2 hostB hostb
2.1.1.3 hostC hostc
1.1.1.4 hostD hostd
1.1.1.5 hostE hoste
1.1.1.6 hostF hostf
1.1.1.7 hostG hostg

reorder最後の操作は、入力で見つかったのと同じ順序でフィールドを並べ替えます(そうでない場合は、最後の2つのフィールドが部分データのフィールド1と2として使用されます)。

おすすめ記事