วิธีการลบช่องว่างต่อท้ายท้ายบรรทัดในไฟล์ที่กำหนด (มากกว่าหนึ่ง)?


9

ฉันเลยเบื่อกับช่องว่างที่ไร้ประโยชน์ในไฟล์ต้นฉบับที่ฉันได้กำหนดค่าเป็นกลุ่มเพื่อแสดงให้พวกเขา

ปัญหาคือว่าฉันบ่อยมาก (ถ้าไม่เสมอ) ต้องจัดการกับช่องว่างที่ไร้ประโยชน์กับผู้พัฒนาเพื่อนของฉัน

ฉันแค่ต้องการสแกนไฟล์ต้นฉบับ (รับนิพจน์ปกติ) และลบช่องว่างออกจากไฟล์ที่กำหนดทั้งหมด

ฉันค้นหาในเว็บ ("ทุบตีลบช่องว่าง" ฯลฯ ) แต่ไม่พบสิ่งที่มีประโยชน์


2
ลบช่องว่างอะไร หากไม่มีตัวอย่างของสิ่งที่คุณต้องการลบออกฉันไม่เห็นว่าใครจะช่วยคุณได้บ้าง (ฉันคาดเดาtr -d ' ' < file.fooไม่ได้ว่าสิ่งที่คุณกำลังมองหา.)
Mat

คุณจะบอกความแตกต่างระหว่างช่องว่างที่ไม่มีประโยชน์กับโปรแกรมโดยช่องว่างได้อย่างไร BTW: คุณสามารถใช้ a สำหรับ loop และ mv และ sed และยุบ whitespace;
bsd

นอกจากนี้คุณยังสามารถลบช่องว่างต่อท้ายเมื่อคุณบันทึกไฟล์ของคุณในกลุ่ม (บันทึกปัญหาในการรันคำสั่งนี้หลังจากที่คุณแก้ไขบางสิ่ง): unix.stackexchange.com/questions/75430/…
Lucas

คำตอบ:


8

หากช่องว่างไร้ประโยชน์คุณหมายถึงช่องว่างท้ายท้ายบรรทัดสิ่งนี้จะทำงานบนระบบ GNU:

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

(แทนที่*.cด้วยไฟล์ต้นฉบับที่คุณต้องการ)


ฉันเปลี่ยนชื่อขอบคุณมากสำหรับคำตอบของคุณ มีคนลงคะแนนเพราะบางทีเขาอาจคิดว่ามันง่ายเกินไปที่ไม่มีใครถามคำถามเช่น;^)นั้น ขอขอบคุณอีกครั้ง.
Olivier Pons

1

นี่เป็นปัญหาที่เกิดขึ้นอีก!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(สิ่งนี้จะลบ ' \r\n' ด้วย)

ปกติฉันใช้รุ่น "nrs" ที่ซับซ้อนกว่าเล็กน้อย (ไม่มีที่ว่างซ้ำซ้อน):

#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g;                 ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !

ติดตั้ง: chmod 755 nrs; cp nrs ~/bin; (หรือคล้ายกัน)

และใช้: nrs ./*.c

อย่าใช้มันในไฟล์ไบนารี!


0

ลองใช้วิธี Ex:

ex +'bufdo!%s/\s\+$//e' -scxa *.*

เพื่อลบช่องว่างต่อท้ายออกจากไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบัน สำหรับการเรียกซ้ำ (bash4 / zsh) คุณอาจใช้ตัวเลือก globbing ใหม่ ( **/*.*)

หมายเหตุ: :bufdoคำสั่งไม่POSIX



0

เพื่อหลีกเลี่ยงการสัมผัสไฟล์ที่ใช้ได้แล้วด้วยเครื่องมือ GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.