วิธีลบ Ctrl-M จากไฟล์ที่ไม่มี dos2unix, perl, tr และ sed อยู่?


9

สมมติว่าคุณกำลังทำงานบนเซิร์ฟเวอร์ยูนิกซ์เก่ามากที่dos2unix, perl, trและsedไม่ได้อยู่ คุณจะแปลงไฟล์จากdosเป็นฟอร์แมตยูนิกซ์ได้อย่างไร?


ได้รับอนุญาต
elmarco

@elmarco: ไม่ :(
Hemant

9
เซิร์ฟเวอร์ยูนิกซ์ต้องมีอายุเท่าไรtrและsedไม่ sedเก่า ........ iirc,
xenoterracide

1
จะexหรือedมีอยู่ในระบบเช่นนั้นหรือไม่? ผมเรียกมันว่า would'nt ยูนิกซ์ถ้าไม่มีหรือtr sed
MattBianco

3
ไม่มีsed? จริงๆ!? จากความสนใจระบบคืออะไร? ตามที่ Gilles และ MattBianco ชี้ให้เห็นก็อาจจะยังคงมีedอย่างน้อย
Mikel

คำตอบ:


12

ฉันคิดว่าคุณกำลังหมายถึงการลบ caret-M ในตอนท้ายของบรรทัด คุณสามารถใช้การค้นหาและแทนที่ใน vi เพื่อทำสิ่งนี้

ใน vi ฉันปกติแล้ว: (โดยที่ "^" หมายถึง CTRL):

:%s/^V^M//g

ซึ่งแสดงบนหน้าจอเป็น:

:%s/^M//g

ขอบคุณที่ทำงาน :) ฉันคิดว่ามันเป็นโซลูชั่นแบบพกพามาก
Hemant

4
คุณยังสามารถใช้ sed เพื่อทำสิ่งเดียวกันโดยไม่ต้องเรียกใช้ไฟล์: sed -e '% s / ^ V ^ M // g' ชื่อไฟล์ที่จะแสดงบนหน้าจอเป็น sed e '% s / ^ ชื่อไฟล์ M // g 'โดยทั่วไปถ้าคุณสามารถค้นหา / แทนที่มันในกลุ่มคำสั่งได้เหมือนกันใน sed
เกบ

2
@gabe: ทางออก sed เป็นจริงแม้จะพกพามากขึ้น +1 :)
wzzrd

@wzzrd sedและviทั้งคู่ถูกระบุโดย POSIXและviคำสั่งนั้นไม่ได้ใช้ส่วนขยาย Vim ใด ๆ
Wildcard

@jjclarkson คำว่าอะไร^Vและ '^ M' หมายถึงอะไร
cokeude

6

เซิร์ฟเวอร์ที่ไม่มีtrหรือsedจะต้องเก่าจริงๆหรือขาดคำสั่งพื้นฐานบางอย่าง หวังว่าedจะมี; มันมีอยู่ในระบบปฏิบัติการยูนิกซ์ฉบับพิมพ์ครั้งแรก

ed /path/to/file
1,$s/^V^M$//
w
q

โดยที่^V^Mพิมพ์Ctrl+ Vแล้วCtrl+ M(เพื่อป้อนตัวอักษรบรรทัด) หากคุณรู้ว่าทุกบรรทัดจบลงใน CR LF คุณสามารถใช้1,$s/.$//แทน (ลบตัวอักษรสุดท้ายในแต่ละบรรทัดโดยไม่เลือก)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.