ฉันมีไฟล์เช่นนี้:
other lines . . .
blah blah blah (:34)
ฉันต้องการค้นหาตัวเลขในไฟล์ด้านบน ฉันมากับ:
grep [0-9] filename
แต่นั่นเป็นการพิมพ์ทั้งหมด:
blah blah blah (:34)
34
แต่ฉันต้องการเพียง มีวิธีการทำเช่นนั้น?
ฉันมีไฟล์เช่นนี้:
other lines . . .
blah blah blah (:34)
ฉันต้องการค้นหาตัวเลขในไฟล์ด้านบน ฉันมากับ:
grep [0-9] filename
แต่นั่นเป็นการพิมพ์ทั้งหมด:
blah blah blah (:34)
34
แต่ฉันต้องการเพียง มีวิธีการทำเช่นนั้น?
คำตอบ:
คุณสามารถใช้grep -E
เพื่อเข้าถึงไวยากรณ์นิพจน์ปกติแบบขยาย (เช่นegrep )
ฉันสร้างไฟล์ทดสอบที่มีเนื้อหาด้านล่าง:
>cat testfile
this is some text
with some random lines
again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)
ตอนนี้เพื่อ grep ตัวเลขเพียงอย่างเดียวจากข้อความที่คุณสามารถใช้
>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
จะถูกส่งออก
ที่นี่"-o"ใช้เพื่อส่งออกเฉพาะส่วนที่จับคู่ของบรรทัดมากกว่าเนื้อหาทั้งหมดของบรรทัด
วงเล็บปีกกา (เช่น {และ}) ระบุจำนวนอินสแตนซ์ของการแข่งขัน {1,4} ต้องการให้อักขระหรือคลาสอักขระก่อนหน้าต้องเกิดขึ้นอย่างน้อยหนึ่งครั้ง แต่ไม่เกินสี่ครั้ง
หวังว่านี่จะช่วยได้
grep -Eo '[0-9]{1,}' testfile
คุณสามารถใช้นิพจน์วงเล็บเหลี่ยมที่[:digit:]
ระบุตามมาตรา 9.3.5 ของมาตรฐาน POSIXร่วมกับการ-o
ตั้งค่าสถานะเพื่อพิมพ์เฉพาะ "คำ"
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
grep -o
จะพิมพ์เฉพาะส่วนที่ตรงกันของบรรทัด มิฉะนั้น grep จะพิมพ์บรรทัดใดก็ได้ด้วยลวดลาย
ฉันจะใช้ curl เพื่อเข้าถึงไฟล์ของคุณในเครื่องหรือจากระยะไกลจากนั้นฉันจะ grep บรรทัดที่มีตัวเลขล้อมรอบ (:) จากนั้นตัดส่วนเหล่านั้นออกและเขียนลงไฟล์
คำตอบที่ยอมรับไม่สนใจอาจมีตัวเลขในบรรทัดก่อนหน้าของไฟล์มันใช้งานได้กับข้อมูลตัวอย่าง แต่ถ้าไฟล์เป็นรีโมต
ในประเทศ
curl file:///home/$USER/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
ในตัวอย่างนี้output.txt
ในโฟลเดอร์ปัจจุบันของคุณจะถูกเขียนทับเรากำลังเข้าถึงinput.txt
จากโฟลเดอร์สาธารณะของคุณ
ห่างไกล
curl https://yoursite.com/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
ในตัวอย่างนี้output.txt
ในโฟลเดอร์ปัจจุบันของคุณจะเขียนมากกว่าเรามีการเข้าถึงจากinput.txt
https://yoursite.com/Public/
curl
เมื่อง่าย ๆcat
จะทำอย่างไร
man grep