単語をますます多くの数に置き換える方法は?

単語をますます多くの数に置き換える方法は?

たとえば、file.txtの唯一のコンテンツは次のとおりです。

xxxxxxxxxHAHAxxxxxxHOHOxxxxxxx  

HAHAをseq 1 3に変更し、HOHOをseq 5 7に変更したいので、出力は次のようになります。

xxxxxxxxx1xxxxxx5xxxxxxx   
xxxxxxxxx2xxxxxx6xxxxxxx   
xxxxxxxxx3xxxxxx7xxxxxxx   

私がしたこと:

for i in $(seq 1 3)    
do  sed "s/HAHA/$i/g" file.txt   
  for i in $(seq 5 7)    
  do sed "s/HOHO/$i/g" file.txt   
  done   
done > new.txt     

しかし、new.txtは私が期待したものを表示しません。コードをどのように変更する必要がありますか?

ベストアンサー1

bash組み込みコマンドを使用してreadさまざまなファイル記述子の機能を読み取る方法は次のとおりです。

while read -u3 i && read -u4 j; do 
    sed -e "s/HAHA/$i/" -e "s/HOHO/$j/" file.txt
done > new.txt 3< <(seq 1 3) 4< <(seq 5 7)

seq数値には単純な算術関係があるため、単一のプロセス+いくつかのシェル算術を使用する方が簡単です。

for i in $(seq 1 3); do
  sed -e "s/HAHA/$i/" -e "s/HOHO/$((i+4))/" file.txt
done > new.txt

どちらの場合も、以下を参照してください。シェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?- 提供した最小限の例では非効率性は重要ではないかもしれませんが、より深刻な作業を行う場合は、他のアプローチを使用することを検討する必要があります。

おすすめ記事