دوستان و علاقمندان به مباحث آموزش یونیکس (UNIX) ، این آموزش را از سایت پی وی لرن دنبال خواهیم نمود. بررسی دستور Pipe و Filter در یونیکس را در این بخش، خواهیم داشت.
در این بخش ، در مورد Pipe و Filter های موجود در یونیکس به تفصیل صحبت خواهیم کرد. می توانید دو دستور را به هم متصل کنید تا خروجی یک برنامه، به ورودی برنامه بعدی تبدیل شود. دو یا چند دستور متصل به این روش یک Pipe را تشکیل می دهند.
برای ساختن Pipe ، یک نوار عمودی (|) را در خط فرمان بین دو دستور قرار دهید.
وقتی یک برنامه، ورودی خود را از برنامه دیگر می گیرد ، مقداری عملیات را روی آن ورودی انجام می دهد و نتیجه را به خروجی استاندارد می نویسد. به این Filter گفته می شود.
دستور grep یک فایل یا فایل ها را برای خطوطی که الگوی خاصی دارند جستجو می کند. سینتکس به شکل زیر است.
1 | $grep pattern file(s) |
نام “grep” از دستور g/re/p (یک ویرایشگر خط Unix) گرفته شده است که به معنی “جستجوی یک عبارت منظم در سطح جهانی است و تمام سطرهای موجود در آن را چاپ می کند” (“globally search for a regular expression and print all lines containing it”).
یک عبارت معمولی یا متن ساده (یک کلمه ، برای مثال) و / یا کاراکترهای ویژه ای است که برای تطبیق الگو استفاده می شود.
ساده ترین استفاده از grep این است که به دنبال الگویی متشکل از یک کلمه واحد باشید. می توان از آن در pipe استفاده کرد به گونه ای که فقط آن خطوط فایل های ورودی که شامل یک رشته مشخص هستند به خروجی استاندارد ارسال شوند. اگر grep یک filename را برای خواندن به شما ارائه نمی دهد ، ورودی استاندارد آن را می خواند. این روش تمام برنامه های فیلتر است.
1 2 3 4 5 6 | $ls -l | grep "Aug" -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $ |
گزینه های مختلفی وجود دارد که می توانید به همراه دستور grep از آن ها استفاده کنید.
ردیف | گزینه ها و شرح |
---|---|
۱ | v- تمام خطوطی را که با الگو مطابقت ندارند را چاپ می کند. |
۲ | n- تمام خطوطی را که با الگو مطابقت دارند را به همراه شماره خط شان چاپ می کند. |
۳ | l- فقط نام فایل هایی که با خطوط مطابقت دارد را چاپ می کند (حرف “l”)
|
۴ | c- فقط شماره خطوطی که با الگو مططابقت دارد را چاپ می کند.
|
۵ | i- در صورتی که الگوی داده شده شامل حروف کوچک و بزرگ باشد، grep تفاوتی به آن ها قائل نمی شود و آن ها را نادیده می گیرد. |
حال اجازه دهید از یک عبارت regular استفاده کنیم که به grep می گوید: تمام خطوطی که در آن carol و به دنبالش در فاصله ای برابر با یک، یا بیش تر از یک حرف، کلمه ی Aug را مشاهده نمودید، آن خط را چاپ می کند.
1 2 3 | $ls -l | grep -i "carol.*aug" -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $ |
بررسی دستور Pipe و Filter در یونیکس را با دستور sort ادامه می دهیم.
دستور sort ، خطوط متن را بر اساس حروف الفبا یا عددی مرتب می کند. در مثال زیر خطوط موجود در فایل food مرتب شده اند.
1 2 3 4 5 6 7 8 9 10 11 | $sort food Afghani Cuisine Bangkok Wok Big Apple Deli Isle of Java Mandalay Sushi and Sashimi Sweet Tooth Tio Pepe's Peppers $ |
دستور sort ، خطوط متن را به صورت پیش فرض بر اساس حروف الفبا مرتب می کند. گزینه های بسیاری وجود دارد که مرتب سازی را بر اساس آن ها، کنترل می کند.
ردیف | شرح |
---|---|
۱ | n- مرتب سازی های عددی (به عنوان مثال: ۱۰ بعد از ۲ مرتب می شود) ، فاصله ها و تب ها را نادیده می گیرد. |
۲ | r- ترتیب مرتب سازی برعکس می شود. |
۳ | f- هنگام مرتب سازی (Sort)، حروف بزرگ و کوچک را با هم در نظر می گیرد. |
۴ | x+ هنگام مرتب سازی، فیلدها را به تعداد x را نادیده می گیرد. |
بیش از دو دستور ممکن است به یک pipe وصل شوند. با استفاده از نمونه pipe قبلی با استفاده از grep ، می توانیم فایل های تغییر یافته در ماه آگوست را به ترتیب اندازه مرتب سازی کنیم.
pipe زیر شامل دستورات ls ، grep و sort است.
1 2 3 4 5 6 | $ls -l | grep "Aug" | sort +4n -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 $ |
این pipe تمام فایل های موجود در دایرکتوری شما را به ترتیب در ماه آگوست اصلاح می کند و آن ها را روی صفحه ترمینال چاپ می کند. گزینه ی sort + 4n چهار فیلد را پرش می کند (متن ها توسط فاصله ها از هم جدا می شوند) سپس خطوط را به ترتیب عددی مرتب می کنید.
در صورتی که دستوری را اجرا می کنید که خروجی آن بیش تر از اندازه ی معمولِ اسکرین می باشد ، می توانید آن را با دستور more اجرا کنید تا صفحه بندی شود، یا از دستور pg به عنوان فیلتر استفاده کنید. وقتی صفحه پر از متن شد ، نمایش متوقف می شود.
بیایید فرض کنیم که شما یک لیست دایرکتوری طولانی دارید. برای آسان تر خواندن لیست مرتب شده ، خروجی را از طریق زیر pipe کنید.
1 2 3 4 5 6 7 8 9 10 | $ls -l | grep "Aug" | sort +4n | more -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03 . . . -rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05 --More--(74%) |
در این بخ از آموزش یونیکس، مبحث بررسی دستور Pipe و Filter در یونیکس را دنبال نمودیم. در بخش بعدی با موضوع مدیریت Process ها در یونیکس در خدمتتون خواهیم بود. با وب سایت پی وی لرن همراه باشید.