ファイルの特定の行の1つの単語を変更しようとしていますが、すべてを一緒に接続するのに問題があります。
基本的に、ファイルの1行に「firmware_revision」というキーワードがあり、この行(およびこの行のみ)に「test」という単語を「production」という単語に置き換えたいと思います。
だから私はこれを行うことができます:
grep 'firmware_revision' myfile.py | sed 's/test/production'
これにより、必要な行が選択され、置換が実行されますが、この新しい行を元のファイルに入れて古い行を置き換える方法がわかりません。ファイルにリダイレクトすることはできないので、どうすればよいですか?
一時grep
ファイルを使用していても、を使用して必要な行だけを取得すると、ファイル内の他のすべてのデータが失われるため、すべてを一時ファイルにリダイレクトして元のファイルを一時ファイルに置き換えることはできなくなります。
編集-誰かが詳細情報を求めました
このような行でいっぱいのファイルがあるとしましょう
[
('key_name1', str, 'value1', 'Description'),
('key_name2', str, 'value2', 'Description'),
('key_name3', str, 'value3', 'Description'),
('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision name')
]
ここで、「firmware_revision」を含む行を検索し、その行の「test」という単語のすべてのインスタンスを「production」に変更するスクリプト(理想的には1行)を記述したいと思います。「テスト」という単語がそのファイルの他の場所にある可能性があり、それらを変更したくありません。明確にするために、上の行を
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
どうすればよいですか?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
は非常に強力であり、両方の機能(grep
および置換)を実行できますが、ラインがどのように見えるかについての詳細情報が必要になります。