ฉันมีไฟล์ข้อความและต้องการให้บรรทัดเริ่มต้นด้วย<Path>
และลบบรรทัดอื่นทั้งหมด
ฉันจะทำมันได้อย่างไร
ฉันมีไฟล์ข้อความและต้องการให้บรรทัดเริ่มต้นด้วย<Path>
และลบบรรทัดอื่นทั้งหมด
ฉันจะทำมันได้อย่างไร
คำตอบ:
มีวิธีง่ายๆในการบรรลุเป้าหมายนี้ คุณต้องดำเนินการ 3 ขั้นตอน
ไปที่เมนูค้นหา> ค้นหา ... > เลือกแท็บ "ทำเครื่องหมาย" เปิดใช้งานนิพจน์ทั่วไป ค้นหา^<Path>
( ^
สำหรับการเริ่มบรรทัด) อย่าลืมตรวจสอบ "เส้นคั่นหน้า" และกด "ทำเครื่องหมายทั้งหมด"
==> แถวทั้งหมดที่คุณต้องการเก็บบุ๊กมาร์กไว้
ไปที่เมนู "ค้นหา - คั่นหน้า - ย้อนกลับคั่นหน้า"
==> ทุกบรรทัดที่คุณต้องการลบจะถูกคั่นไว้
ไปที่เมนู "ค้นหา - คั่นหน้า - ลบบรรทัดที่คั่นไว้"
==> บรรทัดที่คั่นไว้ทั้งหมดจะถูกลบ
สามารถทำได้จริงในสองขั้นตอนตั้งแต่ 6.3 ฉันคิดว่ามันสามารถทำได้เร็วกว่าที่ฉันมี 5.9 เมื่อฉันลองครั้งแรก
ใช้โพสต์ของ stema เป็นพื้นฐานของคำตอบนี้ มีขั้นตอนน้อยกว่าหนึ่งตอนนี้ ทำเครื่องหมายบรรทัดและลบบรรทัดที่ไม่ได้ทำเครื่องหมาย เสร็จสิ้น ปฏิบัติตามคำแนะนำอย่างละเอียด
เมนูค้นหา "ค้นหา" ในช่องโต้ตอบค้นหาคลิกแท็บ "ทำเครื่องหมาย" เปิดใช้งานนิพจน์ทั่วไป ค้นหา^<Path>
( ^
สำหรับการเริ่มบรรทัด) อย่าลืมตรวจสอบ "เส้นคั่นหน้า" และกด "ทำเครื่องหมายทั้งหมด"
==> แถวทั้งหมดที่คุณต้องการเก็บไว้ในขณะนี้มีบุ๊คมาร์ค
เมนูค้นหา -> ที่คั่นหน้า -> ลบเส้นที่ไม่มีเครื่องหมาย
==> ทั้งหมดNONสายบุ๊คมาร์คจะถูกลบออก
^
ในการค้นหาหรือใช้นิพจน์ทั่วไป หวังว่านี่จะช่วยใครซักคน
แทนที่ regex
(?!^.*test.*$)^.+
แทนที่การทดสอบด้วยข้อความที่คุณร้องขอ
แทนที่
[\r\n]{2,}
กับ \r\n
ใช้^(?!<Path>).*\r\n
เพื่อแทนที่การจับคู่ด้วยสตริงว่าง ^(?!.*?test).*\r\n
รุ่นทั่วไปจะเป็น นี่จะไม่ลบบรรทัดว่างที่ท้ายไฟล์ บรรทัดอื่นทั้งหมดจะถูกลบออกรวมถึงบรรทัดว่างต่อเนื่องหลายรายการ
(?!)
เป็นการมองในแง่ลบ ^.*test.*$
เลือกทั้งบรรทัดที่มีข้อความที่ร้องขอ
[\r\n]{2,}
ตรงกับสิ่ง\r\n
ที่เกิดขึ้นมากกว่านี้เมื่อเป็น Windows New line หากคุณมี Linux หรือระบบปฏิบัติการอื่นคุณอาจต้องยุ่งกับสิ่งนี้ ที่สองคือการแทนที่ด้วยหนึ่งบรรทัดกลับ
\r\n
EOL กล่าวถึงในการโพสต์เป็นสิ่งที่ Windows ใช้และดังนั้นจึงอาจจะหรืออาจจะไม่สิ่งที่คุณกำลังมองหา บ่อยครั้งในสภาพแวดล้อม Linux เป็นเพียง\n
หรือในสภาพแวดล้อม Mac เพียง\r
ดังนั้นถ้าคุณดึงไฟล์จากทั้งสองมันจะไม่เป็นสไตล์ Windows EOL แต่ถ้าคุณดาวน์โหลดผ่าน FileZilla และโหมด ASCII เรียกมันอาจจะเปลี่ยนพวกเขากลับมาใน Windows EOL (ชอบ\n
เข้า\r\n
) ดังนั้นหาก regex ไม่ทำงานให้ตรวจสอบสไตล์ EOL โดยไปที่ "ดู> แสดงสัญลักษณ์> แสดงจุดสิ้นสุดของบรรทัด" CR \r
= LF \n
=
สำหรับฉันแล้วดูเหมือนว่าวิธีที่ง่ายที่สุดคือเพียงใช้คุณลักษณะ "ค้นหาทั้งหมดในเอกสารปัจจุบัน" จากนั้นคัดลอกผลลัพธ์ลงในไฟล์ใหม่หรือเลือกทั้งหมดและแทนที่ในไฟล์ปัจจุบัน
นี่จะค้นหาบรรทัดทั้งหมดที่มีข้อความของคุณและแสดงไว้ที่ด้านล่าง เพียงคลิกขวาที่ผลการค้นหาและคัดลอก / วาง
\tLine [\d]*:
คุณไม่ต้องเอาหมายเลขบรรทัดโดยการแทนที่ ยังคงเป็นคำตอบที่ดี
ไปที่เมนูค้นหา -> ค้นหา ... -> เปิดใช้งานนิพจน์ทั่วไป ค้นหา "^ Path " (^ ใช้สำหรับการเริ่มต้นบรรทัด)
คลิกที่ปุ่ม "ค้นหาทั้งหมดในเอกสารปัจจุบัน"
หน้าต่าง "ค้นหาผลลัพธ์" จะปรากฏพร้อมทุกบรรทัดที่มีลวดลาย เลือกคัดลอก / วางลงในแท็บใหม่ใน Notepad ++
ในแท็บใหม่นี้ไปที่: เมนูค้นหา -> แทนที่ ... -> เปิดใช้งานนิพจน์ทั่วไป
ในฟิลด์ "ค้นหาอะไร:" ใช้รูปแบบ: "Line \ d +:" เว้นช่อง "แทนที่ด้วย:" ว่างไว้
คลิกที่ปุ่ม "แทนที่ทั้งหมด"
หากคุณต้องการจับคู่<Path>
และไม่ใช่เส้นทางของระบบไฟล์คุณสามารถลองใช้สิ่งนี้จากบรรทัดคำสั่งโดยใช้ Perl:
perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt
มันทำงานได้กับ Strawberry Perl บน Windows ดังนั้นควรปรับเปลี่ยนตามความเหมาะสมหากผลลัพธ์ไม่ใช่สิ่งที่คุณคาดหวัง
มันเงอะงะ แต่คัดลอกมันทั้งหมดลงในExcelจากนั้นใช้=IF(LEFT(A1,6)="<Path>",A1,"")
และคัดลอกสูตรนั้นลงไปจนสุด จากนั้นคัดลอกกลับไปที่ Notepad ++ มันไม่เหมาะ แต่ก็ค่อนข้างง่าย (ถ้าคุณมี Excel) คำเตือน: มันจะทำงานได้ไม่ดีกับเส้นที่เยื้อง (Excel จะเลื่อนคอลัมน์ ฯลฯ )
ไม่มีวิธีง่ายๆในการทำสิ่งที่คุณต้องการด้วย Notepad ++ คุณจะต้องดาวน์โหลดโปรแกรมไปยังคอมพิวเตอร์ของคุณหรือเขียนสคริปต์บางอย่างใน VB (ฉันถือว่าคุณใช้ Windows)
คุณสามารถทำสิ่งที่คุณต้องการด้วยวิธีใดวิธีหนึ่งจากสองวิธี ยูทิลิตี้ sed เป็นที่ชื่นชอบใน * ระวังและสามารถพบได้สำหรับ Windows จากคนที่ยอดเยี่ยมที่ GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ) คุณจะดาวน์โหลดโปรแกรมนี้แล้วเรียกใช้คำสั่งของคุณจากพรอมต์คำสั่ง
ลบบรรทัดทั้งหมดที่ไม่มี:
sed -i '/^<PATH>/!d' file
พิมพ์ทุกบรรทัดที่มีไฟล์ใหม่:
sed -n '/^<PATH>/p' file > newfile
ฉันแนะนำให้คุณใช้พิมพ์บรรทัดที่คุณต้องการให้เป็นไฟล์ใหม่ สาเหตุของเรื่องนี้คือคุณอาจไม่ได้รับคำสั่ง regex เป็นครั้งแรก ยูทิลิตี sed จะใช้ไวยากรณ์พื้นฐานของนิพจน์ปกติ (ดูการอ้างอิงที่http://www.regular-expressions.info/reference.html ) หากเป็นเช่นพา ธ * nix (/ var / www) คุณจะต้องหลีกเลี่ยง / อักขระเพื่อให้ regex ทำงาน
ตัวอย่าง: sed -n '/^\/var\/www/p' file > newfile
สิ่งนี้จะพิมพ์บรรทัดทั้งหมดที่ขึ้นต้นด้วย '/ var / www' หากฉันยื่นเพื่อหลีกเลี่ยง / ตัวละครแล้วคำสั่งจะมีข้อผิดพลาด คุณสามารถหลีกเลี่ยงอักขระพิเศษ (เช่น /) ด้วยอักขระเครื่องหมายทับขวา \
โซลูชันที่ดีขึ้นด้วยการแทนที่ regex:
(?!^.*SOMETEXT.*$)^.+\r?\n
และแทนที่ด้วยอะไร
ใช้ Search-> แทนที่และป้อนนิพจน์ปกติเช่นและแทนที่ทั้งหมดที่มีสตริงที่ว่างเปล่าโดยใช้^[^ ].*
Regular expression
ขั้นตอนต่อไปคือค้นหาบรรทัดว่างที่ค้นหาเพื่อ\n\n
แทนที่ด้วยการ\n
ใช้Extended
หลายครั้งจนกระทั่ง0 occurrences were found.
(ใช้\r\n\r\n
และ\r\n
ขึ้นอยู่กับรูปแบบไฟล์) หากคุณมีบรรทัดว่างจำนวนมากในหนึ่งแถวมันจะเร็วกว่าที่จะใช้\n\n\n\n\n\n\n
หรือมากกว่า\n
: s ในสตริงการค้นหา