grep + จับคู่ปริมาณและตัวเลข


0

ด้วยคำสั่งต่อไปนี้ฉันสามารถตรวจสอบ / จับคู่หาก param มีตัวเลขหรือ "."

  param=2.3.1
  echo $param |  grep [0-9][.] 

แต่สิ่งที่ฉันต้องเพิ่มในไวยากรณ์ของฉันเพื่อตรวจสอบว่าฉันมีอย่างน้อยสองตัวเลข (ตัวเลขหรือมากกว่าทางด้านขวาและหมายเลขหรือมากกว่าทางด้านซ้าย)

ตัวอย่างของตัวเลขที่ถูกต้อง

 12.2
 1.2
 4.3.0
 123.4.223
 12.33.22.4.2
 1.0.2.3.4

ตัวอย่างของตัวเลขที่ไม่ถูกต้อง

 .39274
 1233.
 .7.
 .5666666.
 2...


ตัวอย่างเช่น Perl นี้ฉันต้อง ksh / ตัวอย่าง shellscript
Eytan

ยุติธรรมพอ แต่คุณไม่ได้บอกว่าทุกที่บวก Linux ที่ไม่มีperl?
slhck

คำตอบ:


1

ใช้งานได้ในbash(ฉันไม่มีksh):

grep '^\([0-9]\+\.\)\+[0-9]\+$'

ตัวอย่างนี้ใช้ไม่ได้? echo 2.3.34.32_445454 | grep '^ ([0-9] \ + \.) \ + [0-9] \ + $'
Eytan

@Eytan: echo 2.3.34.32.445454 | grep '^\([0-9]\+\.\)\+[0-9]\+$'ทำงาน ทำไมคุณใช้underscore(_)?
kev

เพราะตัวเลขสามารถอยู่กับถ่านใด ๆ ที่เป็น "_"
Eytan

@Eytan เปลี่ยน[0-9]เป็น[0-9_]
kev

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