ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:1
مجموع:مجموع:1
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با awk بخش سوم

(809 مجموع کلمات موجود در متن)
(5111 بار مطالعه شده است)  نسخه چاپی

آشنایی با awk بخش سوم


عملگرهای Regular Expression
ایــن امــکان وجــود دارد تــا بتــوانید Regular Expression هــا را بــا کــاراکتـرهای ویژه‌ای که به آنها عملگرهای Regular Expression اطلاق می‌شود، ترکیب کنید. این کار باعث می‌شود تا بتوانید عمــلــکرد و قـدرت Regular Expression ها را افزایش دهید.
می‌توانید از کاراکترهایی که در بخش چاپ خروجی به آنها اشاره شد را به همراه Regex ها بکار بگیرید. این کاراکترها در مراحل نخست پردازش شناسایی شده و به کاراکترهای اصلی تبدیل می‌شوند.
اکنون به این کاراکترها می‌پردازیم:

کاراکتر \
بکاربردن این کاراکتر، معنی مخصوص برخی از کاراکترها را از میان می‌برد. برای مثال، $\ بـه معنــی خـــود کــاراکتــر دلار تفسیر می‌شود و نه یک متغییر خاص.

کاراکتر ^
به معنای نقطه شروع یک رشته متنی اسـت. بــرای مثــال chapter@^ بصــورت chapter@ تفسیر شــده و بــرای مثال می‌تواند بــرای تشخیص شـــروع فصــول در یــک فــایــل منبـع Texinfo بکار گرفته شود. کاراکتر ^ به نام anchor خوانده می‌شود زیرا باعث می‌شود الگو تنها در جایی که یک رشته متنی شروع شده باشد، مصداق داشته باشد. توجه داشته باشید که از این کاراکتر نمی‌توان بـــرای تشخیــص نقطه شروع یک خط جدید در میان یک رشته استفاده کرد. برای مثال شرط زیر صحیح نخواهد بود:

if (“line1\nLINE 2” ~ /^L/) ...

کاراکتر $
این کاراکتر مشابه با کاراکتر ^ بوده با این تفاوت کــه نقــطه پـایـانی یـک رشتـه متنی را مشخص می‌کند. برای مثال $p رکوردی را مشخص می‌کند که با یک کاراکتر p خاتمه پیدا کرده باشد. همانند کاراکـتـر ^ از $ نیـز نمی‌توان برای مشخص کردن نقطه پایان خط که در میان یک رشته متنی قرار دارد استفاده کرد. بنابراین شرط زیر صحیح نیست:

if (“line1\nLINE 2” ~ /1$/) ...

کاراکتر . (نقطه)
می‌تواند نشانگر هر تک کاراکتر شامل کــاراکتر خط جدید باشد. برای مثال، P. به معنی هر تک کاراکتری است که پس از آن کاراکتر P قرار دارد. با این حساب می‌توانید یــک Regex بـه صورت U.A ایجاد کنید که معنی آن هر کلمه سه کاراکتری است که ابتدای آن U و انتهای آن A قرار دارد.

[...] (لیست کاراکترها)
هر کاراکتری را که در بین براکت‌ها قــرار داده شــده باشد را شامل می‌شود. برای مثال [MVX] هرکدام از کاراکترهای M، V و X را در یک رشته شامل می‌شود. محدوده کــاراکتــرها را می‌تـــوان بــا استــفاده از یک خط تیره یا کاراکتر hyphen مشخص کرد. برای مثال، [a-dx-z] معادل [abcdxyz] می‌باشد. توجه داشته باشیــد ایــن امــر هنگامی صادق است که تنظیــمات محـلی سیستم روی C قرار داشته باشد. بسیاری از تنظیمات محلی دیگر معمولا کــاراکتـــرها را بــا تــرتـیــب واژه‌نامه‌ای لیست می‌کنند، بنابراین مثال بالا معادل خواهد بود با [aBbCcDdxXyYz]. با تنظیم متغییر محیطی LC_ALL بر روی C می‌توانید از بــراکــت‌ها به حالت سنتـی تنظیمات محلی C استفاده کنید، حتی اگر locale سیستم بر روی مقدار دیگری تنظیم شده باشد. بــرای اینکه بتوانید یک کاراکتر \ یا [ یا – یا ^ را در یک لیست کاراکتر بگنجانید، قبل از آن \ قرار دهید. برای مثال:

[d\]]

که d و [ را شامل خواهد شد. این رفتــار کاراکتر \ در کلـیه نگارش‌های مختلف زبان awk تعریف شده است. یکی دیگر از ویژگی‌های قابل استفاده، کلاسهای کاراکتری تعریف شــده در اسـتاندارد POSIX هستند. این کلاسها شامل یک :]، یک کلیدواژه و یک [: می‌باشند. این کلاسها به قرار زیر هستند:

[:alnum:]

کاراکترهای Alphanumeric

[:alpha:]

کاراکترهای الفبایی

[:blank:]

کاراکترهای Space و Tab

[:cntrl:]

کاراکترهای کنترل

[:digit:]

کاراکترهای عددی

[:graph:]

کاراکترهای قابل دیدن و چاپ

[:lower:]

کاراکترهای الفبایی کوچک

[:print:]

کاراکترهای قابل چاپ

[:punct:]

کاراکترهای نشانه گذاری

[:space:]

کاراکترهای شامل فضای خالی مانند tab و space

[:upper:]

کاراکترهای الفبایی بزرگ

[:xdigit:]

کارکترهایی که ارقام هگزادسیمال هستند



[...^] (لیست کاراکترهای متمم)
این یک امکان تکمیل کننده برای لیست کاراکترها است. نخستین کاراکتر پس از براکت آغازین باید یک کاراکتر ^ باشد. معنی آن تمامی کاراکترهایی است بجز آنچه در لیست قرار داده شده‌اند.

کاراکتر | (تناوب)
از این کاراکتر برای مشخص کردن یک گزینه جایگزین برای شرط استفاده می‌شود. همانند عملگر or در زبان‌های برنامه نویسی. برای مثال:

^P|[[:digit:]]

شامل تمامی رشته‌های متنی است که با P شروع شده یا حاوی عدد باشند.

(...)
برای دسته کردن Regex هایی است که در میان آنها از کاراکتر تناوب استفاده شده است. برای مثال:

;@(samp|code)\{[^}]+\}

می‌تواند در مورد هر دو رشته زیر مصداق داشته باشد:

;@code{foo} or @samp{bar}

در مورد کاراکتر + که در مثال بالا آورده شده است، جلوتر توضیح خواهیم داد.

کاراکتر *
از ایـن کاراکتر می‌تواند برای تمامی کاراکترهایی که پس از یک حرف یک یا چند بار تکرار شده‌اند استفاده کرد. برای مثال *ph می‌تــوانــد شــامل کلیه کاراکترهایی باشد که با p شروع شده و پس از آنها به هر تعدادی h قرار داشته باشد. در صورتی که هیچ h ای مـوجود نبود، p تنها نیز در شمول این Regex قرار خواهد گرفت. برای اینکه بتوانید کاراکتر * را برای بررسی تکرار چندین کاراکتر استفاده کنید، باید از پرانتز استفاده شود. به مثال زیر توجه کنید:

$ awk '/\(c[ad][ad]*r x\)/ { print }' sample

دستور بالا تمامی رکوردهای فایل sample را خوانده و رکوردهایی مانند خروجی مثال زیر را چاپ می‌کند:

(car x)
(cadr x)

کاراکتر +
این کاراکتر مشابه کاراکتر * بوده بـا این تفاوت که کاراکتر مورد نظر حتما باید یکبار تکرار شده باشد. این امر به این معنی است که wh+y می‌تواند شامل why و whhy و نــه wy باشد. مثــال زیــر روش نـگـارش ســاده‌تر مثال قبل با استفاده از کاراکتر + است:

$ awk '/\(c[ad]+r x\)/ { print }' sample

کاراکتر ?
این کاراکتر مشابه کاراکتر * بوده با ایــن تفــاوت کــه قسـمت مورد نظر باید یکبار یا هیچ بار تکرار شود و لاغیر. مثلا fe?d می‌تواند شامل fed و fd باشد و نه چیز دیگر.

{n} یا {,n} یا {n,m}
یک یا دو شماره درون یک براکت می‌تواند نمایانگر تکرار تــعداد مشخصی از یک رشته باشد. برای مثال wh{3}y می‌تواند شـامل whhhy و نه why یا whhhhy باشد. یا wh{3,5}y شامل whhhy، whhhhy و whhhhhy است. در صورتی که پس از عــدد یک کاما قرار گیرد، تکرارهای بیشتر از آن شمرده خواهند شد. این امکان در ابتدا در زبان awk پیاده سازی نشده بود و بعدا برای ایجاد سازگاری با استاندارد POSIX به آن افزوده شد.

ترجمه و اضافات: آلن باغومیان alan@technotux.com
منبع: http://linuxgazette.net/issue67/nazario.html ، GNU/Awk User's Guide

PDF Version

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.