Tôi đang cố gắng thay đổi một từ trên một dòng cụ thể trong một tệp, nhưng tôi gặp một số khó khăn khi kết nối tất cả lại với nhau.
Về cơ bản, trên một dòng trong tệp của tôi có từ khóa 'firmware numvision' và trên dòng này (và chỉ dòng này) tôi muốn thay thế từ 'thử nghiệm' bằng từ 'sản xuất'.
Vì vậy, tôi có thể làm điều này:
grep 'firmware_revision' myfile.py | sed 's/test/production'
Điều này sẽ chọn ra dòng tôi muốn và thực hiện thay thế, nhưng tôi không thể tìm ra cách đưa dòng mới này vào tệp gốc để thay thế dòng cũ. Tôi rõ ràng không thể chuyển hướng nó trở lại tập tin, vậy tôi phải làm sao?
Ngay cả khi tôi sử dụng tạm thời, bằng cách sử dụng grep
để chỉ lấy dòng tôi cần, tôi sẽ mất tất cả các dữ liệu khác trong tệp, vì vậy tôi không còn có thể chuyển hướng tất cả sang tệp tạm thời sau đó thay thế bản gốc bằng temp.
Chỉnh sửa - Ai đó hỏi thêm thông tin
Hãy nói rằng tôi có một tập tin đầy đủ các dòng như thế này
[
('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')
]
bây giờ tôi muốn viết một tập lệnh (lý tưởng là một lớp lót) sẽ tìm ra dòng có chứa 'firmware numvision' và thay đổi tất cả các trường hợp của từ 'test' trên dòng đó thành 'sản xuất'. Từ 'kiểm tra' có thể ở những nơi khác trong tệp đó và tôi không muốn chúng thay đổi. Vì vậy, để rõ ràng, tôi muốn thay đổi dòng trên
('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name')
Làm thế nào để tôi làm điều này?
sed -i.bak '/firmware_revision/ s/test/production/' myfile.py
sed
là rất mạnh mẽ, nó có thể thực hiện cả hai chức năng (grep
và thay thế) nhưng chúng tôi sẽ cần thêm thông tin về cách dòng trông như thế nào để giúp bạn.