انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: سید مسعود امامیان در 27 بهمن 1391، 10:16 بظ
-
سلام دوستان
در یک پرونده چطوری می توان چند کلمه متوالی رو سرچ کرد ؟ برای مثال:
در یک پرونده ایی که 3تا کلمه ی test هست به این صورت :
اینجور که پیداست باید با این دستور پیدا بشه :
egrep -i "(test) \2" address file
که خطا میده !
روش های مختلفی هست ولی با back ref می خوام انجام بشه .
-
با :
egrep -i "\<(test) \2\>" address file
هم تست کردم نشد !
-
میخوای نخستین رخداد یک الگو رو بیابی ؟ :
http://lmgtfy.com/?q=regex+first+occurence+of+word
-
نه دیگه !
الان وقتی بجای 2 ، 1 بذارین :
egrep -i "\<(test) \1\>" address file
در خروجی علاوه بر testی که پیدا می کنه یک test دیگه هم پیدا می کنه!
ولی وقتی 1 رو به 2 تغییر میدی انتظار میره که 3تا test پیدا کنه ! که خطایی که قبلا گفتم ظاهر میشه !
-
egrep -i "(test ){2}" file
توجه کنید که آخرین test هم باید یک فضای خالی بعد از خودش داشته باشه.
-
بله درسته nixoeen جان و من هم اشاره کردم با روش های مختلف میشه
که یکیش همین quantifierی هست که شما مثال زدید ولی با back reference
نمی دونم چرا خروجی داده نمیشه !
روش حل مساله رو نمی خوام، صرفا جهت یادگیری می خوام بدونم .
-
با Back Reference اینجوری میشه:
egrep -i "(test )\1\1" file
اون ۱ تعداد تکرار نیست، مشخص میکنه که کدوم Pattern قبلی استفاده بشه. در اینجا تنها یک Pattern وجود داره، در نتیجه 2\ کلا اشتباهه.
-
بسیار ممنونم .
-
گفتم تاپیک جدا نزنم،
به نظرتون این برای بیرون کشیدن تمام آدرس های مختلف سایت خوبه ؟ :
"\<(http://)?(https://)?(www)?(\.)?[^ ]*\.([a-z]{1,6})?([.a-z]{1,6})?\>"
مثلا انواع مختلف آدرس ها :
http://test.dom
www.test.dom
https://www.test.dom
و...