انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: ghasemi.hussein در 27 امرداد 1397، 02:39 بظ
-
سلام
می خوام با استفاده از دستور egrep از بین کلماتی که از a-z تشکیل شدن، کلمات ۵ حرفی رو جدا کنم. اینجور که از آموزش ها فهمیدم باید دستور زیر رو تایپ کنم:
egrep '[a-z]{5}' file adress
اما این دستور کار نمی کنه و همه ی مقادیر موجود در فایل رو به عنوان خروجی میده.
-
سلام
دستور شما کلماتی با بیش از 5 حرف رو نیشون می ده. ولی اگه دقیقا 5 حرف رو بخواین با grep جدا کنین ، می تونین از این دستورات استفاده کنین :
egrep '^[a-z]{5}$' FILENAME
egrep -x '[a-z]{5}' FILENAME
پ.ن:به جای egrep می تونین از grep -E هم استفاده کنین.
-
ممنون
دستور شما درست کار می کنه. اما متوجه نمی شم که چرا دستور من اشتباهه. طبق توضیحات توی man وقتی از {N} عبارت استفاده می کنی یعنی دقیقاعبارت هایی رو بده که n بار پترن در اونها صادقه. درست متوجه شدم؟
-
ممنون
دستور شما درست کار می کنه. اما متوجه نمی شم که چرا دستور من اشتباهه. طبق توضیحات توی man وقتی از {N} عبارت استفاده می کنی یعنی دقیقاعبارت هایی رو بده که n بار پترن در اونها صادقه. درست متوجه شدم؟
به کاراکتر های "^" , "$" در ابتدا و انتهای regex دقت کن!
-
ممنون
دستور شما درست کار می کنه. اما متوجه نمی شم که چرا دستور من اشتباهه. طبق توضیحات توی man وقتی از {N} عبارت استفاده می کنی یعنی دقیقاعبارت هایی رو بده که n بار پترن در اونها صادقه. درست متوجه شدم؟
خواهش می کنم
همون طور که مسعود جان گفتن اگه می خواین دقیقا n با در اون پترن صدق می کنن باید از ^ و $ استفاده کنین و یا از سوییچ x :
-x, --line-regexp
Select only those matches that exactly match the whole line. For a regular expression
pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.