دستور pipe و filter در لینوکس
شما میتونید دو دستور رو با استفاده از روش pipe به همدیگه مرتبط کنید و از دو دستور یک خروجی واحد بگیرید. این کار رو شما میتونید نه تنها با دو دستور بلکه با تعداد زیادی از دستور ها همراه کنید و از همه اون ها یک خروجی بگیرید. این کار خیلی برای نوشتن اسکریپت های مختلف به کار میاد.
دستور grep
این دستور از خط به خط درون فایل یا فایل هایی را به جستجو برای الگویی که به آن داده میشود می پردازد که قاعده آن به صورت زیر است:
$ grep pattern file(s)
جمله زیر گرفته شده است:
globally search for a regular expression and print all lines containing it.
ساده ترین راه این استفاده از ان دستور آن است که له آن یک کلمه برای جستجو داده شود. به عنوان مثال به دستور زیر نگاه کنید که خروجی دستور اول به دستور دوم pipe شده است:
$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
$
مثالی که در بالا آورده شد خروجی دستور اول را به ازای کلمه Aug به شما میدهد. بعنی هر جا از خروجی دستور اول که کلمه Aug دیده شد آن را نمایش میدهد.
مواردی که میتونید در هنگام استفاده از این دستور استفاده کنید خیلی زیاد و پرکاربردیه منتها من به بخشیش اشاره میکنم:
- v- : همه خطهایی رو که با الگوی شما سازگار نیست رو چاپ میکنه
- n- : خطهایی که با الگوی شما سازگار هست رو همراه با شماره خطشون چاپ میکنه
- c- : فقط شماره خطهایی که با الگوی شما سازگار هست رو نشون میده
- i- : الگوی داده شده شما اگر حاوی حروف کوچک و بزرگ باشد, grep آن را نادیده میگیرد و تفاوتی بی آن دو قائل نمیشه
حالا به یک مثال دیگه دقت کنید. مثالی که در پایین اومده به grep میگه تمام خطهایی که در اون carol و در فاصله ای برابر یک حرف یا بیش از یک حرف کلمه Aug رو دید اون خط رو چاپ کنه:
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
دستور sort
این دستور خروجی فایل یا دستور pipe شده را به ترتیب حروف الفبا میچیند. به مثال زیر توجه کنید:
$sort food
Air
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
این دستور نیز همراه با option هایی هست که به تعدادی از اون ها اشاره میکنم:
- n- : بر اساس اعداد مرتب میکند
- r- : نظم چینش را برعکس چاپ میکند
- f- : هنگام sort کردن حروف کوچک و بزرگ را با هم در نظر میگیرد
- x+ : به تعداد x فیلد ها را نادیده میگیره و فیلد مشخص شده رو به نظم در میاره
مثال زیر ی مثال خوبه:
$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
$
دستور more و pg
اگر شما دستوری رو اجرا کردید که خروجی آن بیشتر از اندازه معمول screen شماست شما میتونید با استفاده از دستور more اون رو صفحه بندی کنید و پایین برید که البته شبیه اون ولی با یک کاربرد دیگه دستور less هست که بعدا بهش میپردازم. دستور pg هم چیزی مشابه more هست.
به مثال زیر توجه کنید:
$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%)