Я намагаюся змінити одне слово у певному рядку у файлі, але у мене виникають певні проблеми при з'єднанні всіх разом.
В основному, в одному рядку в моєму файлі є ключове слово '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' на цьому рядку на 'виробництво'. Слово "тест" може бути в інших місцях цього файлу, і я не хочу, щоб вони змінювалися. Щоб було зрозуміло, я хочу змінити вищевказаний рядок на
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Як це зробити?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
є дуже потужним, він може виконувати обидві функції (grep
і заміну), але нам знадобиться додаткова інформація про те, як виглядає лінія, щоб допомогти вам.