ฉันพยายามที่จะเปลี่ยนคำเดียวในบรรทัดที่ระบุในไฟล์ แต่ฉันมีปัญหาในการเชื่อมต่อทั้งหมดเข้าด้วยกัน
โดยพื้นฐานแล้วในหนึ่งบรรทัดในไฟล์ของฉันมีคำสำคัญ 'firmware_revision' และในบรรทัดนี้ (และเฉพาะบรรทัดนี้) ฉันต้องการแทนที่คำว่า 'ทดสอบ' ด้วยคำว่า 'การผลิต'
ดังนั้นฉันสามารถทำสิ่งนี้:
grep 'firmware_revision' myfile.py | sed 's/test/production'
นี่จะเป็นการเลือกบรรทัดที่ฉันต้องการและทำการทดแทน แต่ฉันไม่สามารถหาวิธีนำบรรทัดใหม่นี้ไปยังไฟล์ต้นฉบับเพื่อแทนที่บรรทัดเก่าได้ เห็นได้ชัดว่าฉันไม่สามารถเปลี่ยนเส้นทางกลับไปที่ไฟล์ดังนั้นฉันควรทำอย่างไร
แม้ว่าฉันใช้ temporaries โดยใช้grep
เพื่อรับสายฉันต้องฉันสูญเสียข้อมูลอื่น ๆ ในไฟล์ดังนั้นฉันไม่สามารถเพียงแค่เปลี่ยนมันทั้งหมดไปยังไฟล์ temp แล้วแทนที่เดิมด้วย temp
แก้ไข - มีคนถามข้อมูลเพิ่มเติม
ให้บอกว่าฉันมีไฟล์เต็มบรรทัดเช่นนี้
[
('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
และการแทนที่) แต่เราต้องการข้อมูลเพิ่มเติมเกี่ยวกับลักษณะของสายเพื่อช่วยคุณ