แทนที่บรรทัดด้วยเพียงบางส่วนของบรรทัด


0

ฉันมีตารางขนาดใหญ่จากวิกิพีเดีย (จากแหล่งวิกิ) และฉันต้องการแยกคอลัมน์เดียวฉันเปิดมันเป็นกลุ่มและสิ่งที่ฉันต้องการแยกดูเหมือนอะไรแบบนี้

|col||[[what I want]]||another column||another one||et cetera|

ทุกบรรทัดมีเนื้อหาที่ฉันต้องการดังนั้นฉันจึงพยายาม:

:%s/\[\[(.+?)\]\]/\1

แต่ฉันได้รับข้อผิดพลาด

E486: Pattern not found: \[\[(.+?)\]\]

คำตอบ:


1

ฉันจะตัดเนื้อหาออกก่อนจากนั้นเปิดใน vi:

cat wikifile.txt | cut -d \| -f 4 > foo
vi foo

สองขั้นตอน แต่สองขั้นตอนฉันจำได้เสมอโดยไม่ต้องคิดมาก


1

ลอง

:%s/.*\[\[\(.*\)\]\].*/\1/

ซึ่งจะกลับมา

what i want

คือคุณต้อง

  • หลบหนีวงเล็บกลุ่ม "(" และ ")" และยัง
  • จับคู่ส่วนก่อนและหลังคอลัมน์ที่น่าสนใจเพราะคุณต้องการแทนที่

อาจปลอดภัยกว่าที่จะใช้ '[^]] *' แทนที่ '. *' ในกรณีที่มีสองฟิลด์ที่มีเครื่องหมายวงเล็บสองช่องล้อมรอบพวกเขา
Jonathan Leffler

0

นี่คือสิ่งที่คุณต้องการ:

1,$ s/^\(.*\[\[\)\(.*\)\(\]\].*\)$/\2/

มันตรวจสอบจากจุดเริ่มต้นของบรรทัดไปที่ [[-> ใส่ไว้ในอะตอม 1 ประโยค -> อะตอม 2 จุดสิ้นสุดของบรรทัด -> อะตอม 3

จากนั้นแสดงอะตอม 2

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