ฉันจะรับรายการและลบออกจากไฟล์ได้อย่างไร


10

ฉันมีรายชื่อโดเมนจำนวนมากที่ฉันต้องลบออกจาก / etc / remotedomains พวกมันอาจจะไม่เรียงตามลำดับใด ๆ ในไฟล์ แต่ละโดเมนอยู่บนบรรทัดเดียว

ฉันจะวนซ้ำในรายการและค้นหาบรรทัดนั้นในโดเมนระยะไกลและลบออกได้อย่างไร

คำตอบ:


11
grep -Fxf list -v /etc/remotedomains > remotedomains.new
mv remotedomains.new /etc/remotedomains

-vบอก grep สายสัญญาณออกเท่านั้นที่ไม่ตรงกับรูปแบบ

-f listบอก grep listการอ่านรูปแบบจากแฟ้ม

-Fบอก grep จะตีความรูปแบบเป็นสตริงธรรมดาไม่แสดงออกปกติ (ดังนั้นคุณจะไม่ได้ทำงานเป็นปัญหากับเมตาอักขระ regex)

-xบอก grep เพื่อให้ตรงกับสายทั้งเช่นถ้ามีรูปแบบfooที่ควรถอดสายfooไม่สายหรือfoobarbarfoo


3
หมายเหตุ: อย่าลืมสำรองข้อมูล/etc/localdomainsและ/etc/remotedomainsทำสิ่งนี้ก่อน
xenoterracide

3
-Fใช้สำหรับการจับคู่สตริงคงที่ (“ การจับคู่แบบตรงทั้งหมด”) แต่ไม่บังคับให้รูปแบบจับคู่ทั้งบรรทัด POSIX ระบุการ-xตั้งค่าสถานะเพื่อ จำกัด การจับคู่กับอินสแตนซ์ที่รูปแบบตรงกับทั้งบรรทัด
Chris Johnsen

@Chris: Bah, จับที่ดี
sepp2k

1

ใช้ comm!

comm -23 /etc/remotedomains remove

จากหน้าคน:

เปรียบเทียบไฟล์ที่เรียงลำดับ FILE1 และ FILE2 ทีละบรรทัด

หากไม่มีตัวเลือกให้สร้างเอาต์พุตสามคอลัมน์ คอลัมน์หนึ่งมีบรรทัดที่ไม่ซ้ำกับ FILE1 คอลัมน์ที่สองมีบรรทัดที่ไม่ซ้ำกับ FILE2 และคอลัมน์ที่สามมีบรรทัดที่ใช้ร่วมกันกับทั้งสองไฟล์

ตัวเลือก -1, -2 และ -3 ปิดใช้งานคอลัมน์ที่เกี่ยวข้อง

อย่างไรก็ตามมันต้องการไฟล์ที่จะถูกจัดเรียง


0

sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt

หากรายการโดเมนที่จะลบอยู่ในไฟล์ให้ทำดังนี้:

sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt

หมายเหตุ:

  1. ใช้ -i.bak เพื่อสร้างข้อมูลสำรองของ domainlist.txt

  2. ถ้า removeelist.txt มีหลายพันรายการมันอาจล้นความยาวบรรทัดคำสั่งสูงสุดได้ นี่ไม่ใช่สถานการณ์ที่มีโอกาสมาก แต่เป็นสิ่งที่คุณควรระวัง

เมื่อพิจารณาเพิ่มเติมความเสี่ยงนั้นสามารถขจัดได้ด้วย:

for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \
  do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.