Próbuję zmienić pojedyncze słowo w określonym wierszu w pliku, ale mam problemy z połączeniem wszystkich razem.
Zasadniczo w jednym wierszu w moim pliku znajduje się słowo kluczowe „wersja_oprogramowania”, a w tym wierszu (i tylko w tym wierszu) chcę zastąpić słowo „test” słowem „produkcja”.
Więc mogę to zrobić:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Spowoduje to wybranie żądanej linii i wykonanie podstawienia, ale nie mogę wymyślić, jak przenieść tę nową linię do oryginalnego pliku, aby zastąpić starą. Oczywiście nie mogę po prostu przekierować go z powrotem do pliku, więc co powinienem zrobić?
Nawet jeśli używam grep
plików tymczasowych, używając tylko potrzebnego wiersza, tracę wszystkie inne dane w pliku, więc nie mogę już przekierować ich wszystkich do pliku tymczasowego, a następnie zastąpić oryginał tempem.
Edytuj - ktoś poprosił o więcej informacji
Powiedzmy, że mam plik pełen takich linii
[
('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')
]
teraz chcę napisać skrypt (najlepiej jednowierszowy), który znajdzie wiersz zawierający „wersja_sprawdzania oprogramowania” i zmieni wszystkie wystąpienia słowa „test” w tym wierszu na „produkcja”. Słowo „test” może znajdować się w innych miejscach tego pliku i nie chcę ich zmieniać. Żeby było jasne, chcę zmienić powyższą linię na
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Jak mam to zrobic?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
jest bardzo potężny, może wykonywać obie funkcje (grep
i podstawianie), ale potrzebujemy więcej informacji o tym, jak wygląda linia, aby ci pomóc.