grep“ some” anyfiles.log> afile.csv ไม่จำเป็นต้องพิมพ์พา ธ และชื่อไฟล์ไปยังไฟล์ CSV


9

ฉันมีไฟล์บันทึกบางไฟล์พวกเขามีมากกว่า 30,000 บรรทัด ฉันต้องการค้นหาชื่อ "โดเมน" และบันทึกในไฟล์ CSV แต่หลังจากบันทึกบรรทัดใด ๆ ในไฟล์ CSV ได้ถูกเพิ่มพา ธ และชื่อไฟล์ของไฟล์อินพุตที่จุดเริ่มต้นของไฟล์ CSV ฉันจะทำอย่างไรถ้าไม่ต้องการพา ธ และชื่อไฟล์อินพุตเพิ่มลงในไฟล์ CSV

ตัวอย่าง:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

ขอแสดงความนับถือโปรดช่วยฉันถ้าใครรู้

คำตอบ:


21

ใช้--no-filenameตัวเลือกสำหรับ grep

หยุดการนำหน้าชื่อไฟล์บนเอาต์พุต นี่คือค่าเริ่มต้นเมื่อมีไฟล์เดียวเท่านั้น (หรืออินพุตมาตรฐานเท่านั้น) เพื่อค้นหา

grep --no-filename "domain" 

อ้างอิง: คู่มือ Grep


1

ดูman cutรายละเอียดได้ แต่ตอบสั้น ๆ grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csvคือ

หรือเห็นman grepและทำgrep -o "domain" /home/logs/*.log >newfile.csv

PS: grep ไม่ส่งออกชื่อไฟล์หากมีไฟล์เพียงไฟล์เดียวในบรรทัดคำสั่งเช่นgrep "domain" /home/logs/any.logในตัวอย่างของคุณ หากคุณต้องการบังคับให้ชื่อไฟล์เป็นเอาต์พุตgrep "domain" /home/logs/any.log /dev/nullจะทำเคล็ดลับ


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