วิธีการลบคอลัมน์ที่สองในกลุ่ม?


12

ฉันมีไฟล์คั่นด้วยแท็บเช่น:

name1   verb1   name2   verb2   etc...

ฉันต้องการลบคอลัมน์ที่สอง ฉันพยายามแก้ไขหนึ่งในคำตอบเหล่านี้แต่ไม่คุ้นเคยsedและawkฉันทำไม่ได้

มีใครช่วยฉันบ้าง


@KasiyA ตัวเดิมของ OP ใช้ \ t เพื่อระบุแท็บ
steeldriver

@steeldriver ตกลงคุณถูกต้องแล้ว ฉันคิดว่ามันเป็นส่วนหนึ่งของสาย ลบออก แต่ผมจะแก้ไขให้ถูกต้องอย่างใดอย่างหนึ่งตามที่โพสต์แรก .thanks
αғsнιη

1
vim โหมดบล็อกภาพไม่สามารถแก้ปัญหาได้? (ctrl-v ในโหมดปกติเลือกคอลัมน์xเพื่อลบ)?
Rmano

@Rmano ช่วยขอบคุณ แต่คุณช่วยบอกฉันทีว่าจะไปยังจุดสิ้นสุดของไฟล์ในโหมดภาพได้อย่างไร? (ฉันลอง ctrl G แต่ไม่ได้ผล)
teaLeef

คำตอบ:


10

ในกลุ่มคุณควรใช้คำสั่ง

:%s/\t[^\t]*//

(แทนที่TABแล้วตามด้วยเหตุการณ์ที่เกิดขึ้นเป็นศูนย์หรือมากกว่าของตัวละครใด ๆ ยกเว้นTABไม่มีอะไร) หากไฟล์ของคุณมีเพียงสองคอลัมน์คุณสามารถใช้ง่ายกว่าเล็กน้อย:%s/\t.*หรือใช้:%s/\t.*$แทนอักขระตัวแรกTABและตัวใดตัวหนึ่งต่อไปนี้จนถึงท้ายบรรทัด


22

คำตอบที่ได้รับการยอมรับนั้นมีความหรูหรามากกว่านี้ (ฉันโหวตขึ้น!) แต่ถ้าคุณจำไม่ได้คุณสามารถใช้vim โหมดบล็อกภาพได้โดยตรง เปิดเป็นกลุ่มและไป (โหมดปกติ) ไปที่มุมแรกของคอลัมน์เช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

พิมพ์CTRL-Vและคุณสามารถเลื่อนเคอร์เซอร์เพื่อเลือกคอลัมน์นี่คือกึ่งกลาง:

ป้อนคำอธิบายรูปภาพที่นี่

หากต้องการไปยังจุดสิ้นสุดให้กดG:

ป้อนคำอธิบายรูปภาพที่นี่

ดูเหมือนว่าบล็อกจะขาดเพราะเราอยู่ในบรรทัดสุดท้ายซึ่งว่างเปล่า เพียงขึ้นไปหนึ่งบรรทัด (ด้วยลูกศรขึ้นหรือk) เพื่อดูอีกครั้ง ... :

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณเพียงกดxเพื่อลบบล็อก:

ป้อนคำอธิบายรูปภาพที่นี่


6

ฉันจะใช้cutสำหรับสิ่งนี้

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

คุณสามารถใช้สิ่งนี้เป็นตัวกรองภายในกลุ่มได้เช่นกัน (สิ่งนี้จะแทนที่บรรทัดทั้งหมดในไฟล์คุณสามารถใช้ (ตัวอย่าง) 2,9แทน%การประมวลผลบรรทัดที่ 2-9 หรือเลือกบรรทัดที่คุณต้องการด้วยV):

:%!cut -f1,3-

-f1,3-หมายถึง 'ฟิลด์พิมพ์หนึ่งแล้วตามด้วยฟิลด์สามและฟิลด์ทั้งหมดจนกระทั่งสิ้นสุดแถว' โดยค่าเริ่มต้นให้cutใช้แท็บเป็นตัวคั่น หากคุณต้องการอย่างอื่นใช้-dตัวเลือก (ดูman cut)


4

คุณสามารถลอง:

:%norm WdW

หรือด้วยตนเองโดยใช้โหมดภาพ:

  1. กระโดดลงไปในคอลัมน์ที่สอง (เช่นโดยการกด: W)
  2. เริ่มการบล็อกด้วยCtrl+vภาพ
  3. เลือกคอลัมน์ที่สอง (เช่นโดยการกด: W, G)
  4. dลบได้โดยการกด

ในการดำเนินการแทนที่จากบรรทัดคำสั่งให้ลอง:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

ที่เกี่ยวข้อง: วิธีการเขียนตัวอักษรสำหรับคีย์ Tab เพื่อใช้สำหรับการเคลื่อนไหว?

ดูสิ่งนี้ด้วย:


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