ค้นหาไฟล์และสร้างไฟล์ใหม่เฉพาะเมื่อตรงตามเงื่อนไข


10

ฉันมีไฟล์บันทึกการทำงานและฉันต้องการค้นหาสตริงและเฉพาะเมื่อสตริงนั้นพบไฟล์ใหม่ที่จะสร้าง ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไรดูเหมือนว่าจะเหมาะสมในกรณีนี้


3
ใช้grepเพื่อค้นหา -qตัวเลือกที่จะระงับการส่งออกทั้งหมดและกลับมาแข่งขัน / nonmatch ผ่านgrepรหัสทางออก 's ซึ่งเป็นทดสอบได้อย่างง่ายดาย
waltinator

2
มันอาจจะมีประโยชน์ที่จะบอกเราว่าเงื่อนไขคืออะไร
j0h

คำตอบ:


16

ประเมินการลัดวงจรหลังจากgrep:

grep -q 'search_pattern' /file && : >/newfile
  • grep -qไม่สร้างเอาต์พุตบน STDOUT เพียงออกจากสถานะการออก0หากพบรูปแบบในไฟล์

  • หากรูปแบบที่พบ ( &&) สร้างไฟล์โดย/newfile: >/newfile


คุณสามารถใช้touch /newfileวิธีปกติหรือbashเปลี่ยนเส้นทางเปล่าก็ได้>/newfileเช่นกัน

เพิ่งทราบว่าถ้าไฟล์ที่มีอยู่แล้วก็touchจะเปลี่ยนเวลาที่เกี่ยวข้องโดยไม่ต้องตัดทอนไฟล์ และการเปลี่ยนเส้นทางที่ว่างเปล่า>/newfileไม่ได้รับการสนับสนุนบนเชลล์ทั้งหมดในระหว่างการเดินทาง (เช่นในzsh) ที่คุณต้องส่ง EOF ด้วยตนเอง


อะไร:ทำอย่างไร
George Udosen

5
@George :นั้นย่อมาจากtrueมันเป็นคำสั่ง no-op ที่มักจะออกด้วยสถานะออก 0
heemayl

@heemayl วิธีนี้ใช้ได้ผลดีที่สุดจนถึงวันนี้
Jacknife

6

แค่เล่น ๆ:

python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"

โดยที่'string'ถูกแทนที่ด้วยสตริง (เงื่อนไข) 'logfile'ถูกแทนที่ด้วยพา ธ ไปยังล็อกไฟล์'newfile'จะถูกแทนที่ด้วยพา ธ ที่แท้จริงไปยังไฟล์ที่จะสร้างทั้งหมดในเครื่องหมายคำพูดเดี่ยวเหมือนในตัวอย่าง


4

คุณสามารถใช้ awk ด้วยsystem()คำสั่งของมัน หาก/pattern/พบรหัสบล็อค{}จะถูกดำเนินการในกรณีนี้เราเรียกtouch /tmp/my_file.txtผ่านsystem()คำสั่ง

/etc/passwdตัวอย่างด้านล่างแสดงให้เห็นว่าการสร้างแฟ้มชั่วคราวหากมีผู้ใช้ของฉันในปัจจุบัน

$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd

$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月  25 07:58 /tmp/my_file.txt

หรืออีกวิธีหนึ่งเราสามารถใช้การเปลี่ยนเส้นทางไปยังไฟล์:

 awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd 

0

คุณไม่ได้บอกว่าคุณต้องการไฟล์ว่างเปล่าใหม่หรือต้องการการประมวลผลที่ซับซ้อนมากขึ้นเพื่อสร้างไฟล์

หากอดีตการตอบกลับโดย @heemayl เป็นจุดที่

มิฉะนั้นให้ใช้คำสั่ง if:

if grep -q 'search_pattern' /file
then
    # Create your file here
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.