คำถามติดแท็ก ed

10
วิธีลบบรรทัดใหม่หลายรายการที่ EOF
ฉันมีไฟล์ที่ลงท้ายด้วยการขึ้นบรรทัดใหม่อย่างน้อยหนึ่งบรรทัดและควรลงท้ายด้วยการขึ้นบรรทัดใหม่เพียงครั้งเดียว ฉันจะทำสิ่งนั้นด้วยเครื่องมือ Bash / Unix / GNU ได้อย่างไร ตัวอย่างไฟล์ที่ไม่ดี: 1\n \n 2\n \n \n 3\n \n \n \n ตัวอย่างไฟล์ที่แก้ไข: 1\n \n 2\n \n \n 3\n กล่าวอีกนัยหนึ่ง: ควรมีการขึ้นบรรทัดใหม่หนึ่งบรรทัดระหว่าง EOF และอักขระที่ไม่ใช่บรรทัดใหม่ล่าสุดของไฟล์ การดำเนินการอ้างอิง อ่านเนื้อหาไฟล์ตัดบรรทัดใหม่หนึ่งบรรทัดจนไม่มีบรรทัดใหม่อีกสองบรรทัดในตอนท้ายเขียนมันกลับมา: #! /bin/python import sys with open(sys.argv[1]) as infile: lines = infile.read() while lines.endswith("\n\n"): lines = lines[:-1] with open(sys.argv[2], 'w') …
25 bash  sed  awk  ed 

4
เหตุใดจึงไม่สามารถออกด้วย Cc ได้
โปรแกรมedตัวแก้ไขข้อความขั้นต่ำไม่สามารถออกได้โดยส่งการขัดจังหวะโดยใช้Ctrl- Cแทนที่จะพิมพ์ข้อความแสดงข้อผิดพลาด "?" ไปยังคอนโซล ทำไมไม่edเพียงออกเมื่อได้รับการขัดจังหวะ? แน่นอนไม่มีเหตุผลว่าทำไมข้อผิดพลาดที่เป็นความลับมีประโยชน์มากกว่าที่นี่เพียงแค่ออกจาก พฤติกรรมนี้นำผู้ใช้ใหม่จำนวนมากไปสู่การโต้ตอบประเภทต่อไปนี้: $ ed hello ? help ? exit ? quit ? ^C ? ^C ? ? ? ^D $ su # rm -f /bin/ed ขยะที่น่าเศร้าเช่นนี้สามารถหลีกเลี่ยงได้ง่ายหากedตกลงกันว่าจะถูกขัดจังหวะ อีกหนึ่งโปรแกรมปากแข็งจัดแสดงเป็นพฤติกรรมที่คล้ายกันซึ่งยังไม่ปรากฏว่ามีเหตุผลมากพอที่จะไม่สนใจless C-cเหตุใดโปรแกรมเหล่านี้จึงไม่เป็นเพียงคำใบ้
20 less  interrupt  ed 

8
ลบบรรทัดแบบแทนที่ในระบบไฟล์แบบเต็ม?
เนื่องจากข้อผิดพลาดของแอปพลิเคชั่นที่ยังไม่ได้ถูกเปิดเผยฉันมีเซิร์ฟเวอร์หลายร้อยเครื่องพร้อมดิสก์เต็มรูปแบบ มีไฟล์หนึ่งไฟล์ที่เต็มไปด้วยบรรทัดที่ซ้ำกันไม่ใช่ไฟล์บันทึก แต่เป็นไฟล์สภาพแวดล้อมผู้ใช้ที่มีคำจำกัดความของตัวแปร (ดังนั้นฉันจึงไม่สามารถลบไฟล์ได้) ฉันเขียนsedคำสั่งง่ายๆเพื่อตรวจสอบหาบรรทัดที่เพิ่มผิดและลบออกแล้วทดสอบในสำเนาของไฟล์ มันทำงานได้ตามที่ตั้งใจไว้ อย่างไรก็ตามเมื่อฉันลองบนเซิร์ฟเวอร์ด้วยดิสก์เต็มฉันได้รับข้อผิดพลาดดังต่อไปนี้ (มาจากหน่วยความจำไม่ใช่คัดลอกและวาง): sed: couldn't flush /path/to/file/sed8923ABC: No space left on deviceServerHostname แน่นอนฉันรู้ว่าไม่มีพื้นที่เหลือ นั่นเป็นเหตุผลที่ฉันพยายามลบเนื้อหา! ( sedคำสั่งที่ฉันใช้จะลดไฟล์บรรทัด 4000+ เป็นประมาณ 90 บรรทัด) sedคำสั่งของฉันเป็นเพียงsed -i '/myregex/d' /path/to/file/filename มีวิธีที่ฉันสามารถใช้คำสั่งนี้แม้จะมีดิสก์เต็มหรือไม่? (ต้องเป็นแบบอัตโนมัติเนื่องจากฉันต้องใช้กับเซิร์ฟเวอร์หลายร้อยเครื่องเพื่อแก้ไขปัญหาอย่างรวดเร็ว) (เห็นได้ชัดว่าข้อผิดพลาดของแอปพลิเคชันจะต้องได้รับการวินิจฉัย แต่ในขณะเดียวกันเซิร์ฟเวอร์ก็ทำงานไม่ถูกต้อง .... ) อัปเดต:สถานการณ์ที่ฉันเผชิญได้รับการแก้ไขโดยการลบสิ่งอื่นที่ฉันพบว่าฉันสามารถลบได้ แต่ฉันยังต้องการคำตอบสำหรับคำถามนี้ซึ่งจะเป็นประโยชน์ในอนาคตและสำหรับคนอื่น ๆ /tmpคือไม่ต้องไป มันอยู่ในระบบไฟล์เดียวกัน ก่อนที่ผมจะอิสระขึ้นพื้นที่ดิสก์ที่ผมได้ทดสอบและพบว่าฉันสามารถลบบรรทัดในviโดยการเปิดไฟล์และทำงานแล้วประสบความสำเร็จในการบันทึกการเปลี่ยนแปลงด้วย:g/myregex/d :wqดูเหมือนว่าเป็นไปได้ที่จะทำสิ่งนี้โดยอัตโนมัติโดยไม่ต้องใช้ระบบไฟล์แยกต่างหากเพื่อเก็บไฟล์ temp .... (?)

1
Thompson และ Ritchie ใช้โปรแกรมแก้ไขข้อความใดในการเขียน Unix
ฉันคิดว่าอาจเป็นqedไปได้ แต่ฉันไม่สามารถหาแหล่งที่มาเพื่อยืนยันหรือปฏิเสธสิ่งนี้ได้ นอกจากนี้ยังedมีอยู่ตลอดระยะเวลาของ Unix และsamเขียนขึ้นในช่วงต้นทศวรรษ 1980 เป็นที่ทราบกันหรือไม่ว่าคนส่วนใหญ่ที่ใช้ใน Bell Labs จาก Unix ถึง Plan9 ฉันคิดว่าไทม์ไลน์มีลักษณะเช่นนี้: qed-> ed-> sam->acme
11 history  editors  ed 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.