ฉันมีไฟล์บันทึกการทำงานและฉันต้องการค้นหาสตริงและเฉพาะเมื่อสตริงนั้นพบไฟล์ใหม่ที่จะสร้าง ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไรดูเหมือนว่าจะเหมาะสมในกรณีนี้
ฉันมีไฟล์บันทึกการทำงานและฉันต้องการค้นหาสตริงและเฉพาะเมื่อสตริงนั้นพบไฟล์ใหม่ที่จะสร้าง ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไรดูเหมือนว่าจะเหมาะสมในกรณีนี้
คำตอบ:
ประเมินการลัดวงจรหลังจากgrep
:
grep -q 'search_pattern' /file && : >/newfile
grep -q
ไม่สร้างเอาต์พุตบน STDOUT เพียงออกจากสถานะการออก0
หากพบรูปแบบในไฟล์
หากรูปแบบที่พบ ( &&
) สร้างไฟล์โดย/newfile
: >/newfile
คุณสามารถใช้touch /newfile
วิธีปกติหรือbash
เปลี่ยนเส้นทางเปล่าก็ได้>/newfile
เช่นกัน
เพิ่งทราบว่าถ้าไฟล์ที่มีอยู่แล้วก็touch
จะเปลี่ยนเวลาที่เกี่ยวข้องโดยไม่ต้องตัดทอนไฟล์ และการเปลี่ยนเส้นทางที่ว่างเปล่า>/newfile
ไม่ได้รับการสนับสนุนบนเชลล์ทั้งหมดในระหว่างการเดินทาง (เช่นในzsh
) ที่คุณต้องส่ง EOF ด้วยตนเอง
:
ทำอย่างไร
:
นั้นย่อมาจากtrue
มันเป็นคำสั่ง no-op ที่มักจะออกด้วยสถานะออก 0
แค่เล่น ๆ:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
โดยที่'string'
ถูกแทนที่ด้วยสตริง (เงื่อนไข) 'logfile'
ถูกแทนที่ด้วยพา ธ ไปยังล็อกไฟล์'newfile'
จะถูกแทนที่ด้วยพา ธ ที่แท้จริงไปยังไฟล์ที่จะสร้างทั้งหมดในเครื่องหมายคำพูดเดี่ยวเหมือนในตัวอย่าง
คุณสามารถใช้ 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
คุณไม่ได้บอกว่าคุณต้องการไฟล์ว่างเปล่าใหม่หรือต้องการการประมวลผลที่ซับซ้อนมากขึ้นเพื่อสร้างไฟล์
หากอดีตการตอบกลับโดย @heemayl เป็นจุดที่
มิฉะนั้นให้ใช้คำสั่ง if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
grep
เพื่อค้นหา-q
ตัวเลือกที่จะระงับการส่งออกทั้งหมดและกลับมาแข่งขัน / nonmatch ผ่านgrep
รหัสทางออก 's ซึ่งเป็นทดสอบได้อย่างง่ายดาย