فصل پانزدهم - فیلترهای متن
در فصل ۱۳ با دستور cat برای مشاهده محتوای یک فایل متنی آشنا شدید. در این
فصل با فیلترها و کنترل کنندههای دیگری آشنا میشوید که برای نمایش محتوای
یک فایل میتوانند بسیار مفید باشند.
محتویات[نهفتن] |
دستور head
این دستور برای نمایش محتویات ابتدایی فایل به مقدار دلخواه مورد استفاده قرار میگیرد. شکل کلی این دستور به صورت زیر است:
head [option] files
نکته در صورتی که هیچ آپشنی برای دستور head قرار نگیرد به طور پیش فرض ده خط اول نمایش داده میشود.
مثال:
$ head info.txt
ده خط اول فایل info را نمایش میدهد. همچنین میتوان از این دستور برای چندین فایل استفاده نموند.
مثال:
$ head /proc/cpuinfo /proc/meminfo
خروجی این دستور میتواند به شکل زیر باشد:
==> /proc/cpuinfo <== processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 37 model name : Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz stepping : 5 microcode : 0x3 cpu MHz : 1199.000 cache size : 3072 KB physical id : 0 ==> /proc/meminfo <== MemTotal: 3598784 kB MemFree: 1338184 kB Buffers: 190356 kB Cached: 1236452 kB SwapCached: 0 kB Active: 1371944 kB Inactive: 758828 kB Active(anon): 706252 kB Inactive(anon): 46684 kB Active(file): 665692 kB
مثال: برای نشان دادن 5 خط اول میتوان از یکی از سه شکل زیر استفاده کرد:
$ head -n5 /proc/cpuinfo $ head -n 5 /proc/cpuinfo $ head -5 /proc/cpuinfo
که در هر سه حالت خروجی دستور مشابه است:
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 37 model name : Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz
برای نمایش n کاراکتر اول میتوان از آپشن c استفاده کرد.
مثال:
$ head -c 5 /proc/cpuinfo
خروجی این دستور به شکل زیر و ۵ کاراکتر اول را نمایش میدهد.
proce
همچنین میتوان از آپشنهای b,k,m استفاده کرد:
$ head -cb5 /proc/cpuinfo
۵۱۲*۵ بایت اول را نمایش میدهد. (b=512 byte)
$ head -ck5 /proc/cpuinfo
۵ کیلوبایت اول را نمایش میدهد. (k=1024 bye)
$ head -cm5 /proc/cpuinfo
۵ مگابایت اول را نمایش میدهد. (m=1024 killobyte)
همچنین میتوان آرگومان ورودی دستور head را بوسیلهی خروجی دستورهای دیگر
لوله کشی کرد یا خروجی دستور head را به عنوان ورودی به دستورات دیگر لوله
کشی کرد.
مثال
$ ls -a1 | head -15
که خروجی به صورت زیر تولید میشود:
. .. .abrt .adobe .as.swp .bash_history .bash_logout .bash_profile .bashrc .cache .compiz .config Argue.mp3 .dbus Desktop
مثال
$ ls | head -8 | sort -r Pictures Music forfind Downloads Documents dic Desktop Argue.mp3
دستور tail
این دستور دقیقا مشابه با دستور head عمل میکند با این تفاوت که مقدار دلخواه از انتهای محتویات فایل را نمایش میدهد. شکل کلی این دستور به صورت زیر است:
tail [options] [filenames]
مثال:
$ lspci | tail -4 3f:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02) 3f:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 02) 3f:02.2 Host bridge: Intel Corporation Core Processor Reserved (rev 02) 3f:02.3 Host bridge: Intel Corporation Core Processor Reserved (rev 02)
دستور grep
این دستور خطی در یک فایل را برای شما نمایش میدهد که عبارت یا رشتهی خاصی در آن خط قرار دارد. به عبارت دیگر دستور grep برای جستوجوی یک عبارت و سپس نمایش خطی که آن عبارت در آن قرار دارد مورد استفاده قرار میگیرد. شکل کلی دستور grep به صورت زیر است:
grep [options] pattern [file]
که در آن pattern عبارت مورد نظر و file فایلی است که عبارت در آن جستوجو میشود.
همچنین بجای [file] میتوان خروجی را از دستورات دیگر، به کمک لولهها(pipes) هدایت کرد
[commands] | grep [options] pattern
جستوجو در فایل (یا خروجی هدایت شده) و نمایش تمام خطهایی که pattern در آن قرار دارد.(حساس به بزرگ و کوچک بودن حروف)
$ grep pattern [file]
مثال:
$ grep John /etc/passwd jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash
جستوجو در فایل (یا خروجی هدایت شده) و نمایش تمام خطهایی که pattern در آنها قرار ندارد.
$ grep -v pattern [file]
مثال:
$ grep -v John /etc/passwd jbourne:x:1084:1084:Jason Bourne:/home/jbourne:/bin/bash
تعداد خطهایی که الگو در فایل تکرار شده
$ grep -c pattern [file]
مثال:
$ grep -c John /etc/passwd 2
تعداد کل خطهای فایل بدون درنظر گرفتن خطهای شامل الگو
$ grep -cv pattern [file]
مثال:
$ grep -cv John /etc/passwd 39
جستوجو در فایل و نمایش تمام خطهایی که pattern در آن قرار دارد.(غیرحساس به بزرگ و کوچک بودن حروف)
$ grep -i pattern [file]
مثال:
$ grep -i john /etc/passwd jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash
جستوجو در تمام زیر دایرکتوریهای address
$ grep -r pattern [address]
نتیجه به صورت "pattern filename: line that matching the" نمایش داده میشود مثال:
$ grep -ri john /home/users /home/users/subdir1/letter.txt:John, Thanks for your contribution. /home/users/name_list.txt:John Smith /home/users/name_list.txt:John Doe
جستوجو در تمام زیر دایرکتوریهای address و نمایش فایلهایی که شامل الگو هستند
$ grep -rl pattern [address]
مثال:
$ grep -ril john /root /home/users/subdir1/letter.txt /home/users/name_list.txt
دستور tr
از این دستور میتوان به منظور حذف یا تبدیل برخی از کاراکترها استفاده کرد. شکل کلی این دستور به صورت زیر است:
tr [options] set1 [set2]
در اینجا set1 کاراکترهایی هستند که باید حذف یا جانشین شوند و set2 کاراکترهای جایگزین هستند.
مثال:
$ tr a b
بعد از انجام این دستور ترمینال از شما متنی را دریافت میکند و تمام
حروف b در متنی که تایپ را به a تبدیل میکند. برای خارج شدن از حالت نوشتن
از ctrl+c استفاده کنید.
همانطور که در مثال بالا مشاهده میکنید، بعد از نوشتن متن و جانشینی
کاراکترهای مورد نظر، فایلی بر روی ذخیره نمیشود. همچنین متن از ورودی
گرفته شد.
برای هدایت یک فایل به عنوان ورودی به دستور tr و همچنین هدایت خروجی تولید
شده توسط این دستور، فرم زیر از این دستور مورد استفاده قرار میگیرد:
$ tr "set1" "set2" < input.txt > output.txt
در اینجا ورودی دستور از طریق فایل input.txt هدایت شده و خروجی تولید شده توسط این دستور در فایل output.txt ذخیره میشود.
مثال:
$ tr c d < file1 > file2
در این مثال تمام کاراکترهای c در فایل file1 به کاراکتر d تبدیل شده و نتیجه در فایل file2 ذخیره میشود.
همچنین میتوان از لولهها برای هدایت خروجی یک دستور به عنوان ورودی دستور tr استفاده نمود:
command | tr "set1" "set2"
مثال:
$ cat file3 | tr c d > file4
در این مثال تمام کاراکترهای c در فایل file3، با کاراکتر d جانشین شده و نتیجه در فایل file4 ذخیره میشود.
همچنین میتوان لیستی از کاراکترها را به طور همزمان تبدیل کرد:
مثال:
$ cat file5 | tr '[efg]' '[xyz]' > file6
در این مثال کاراکترهای e و f و g با کاراکترهای x و y و z جایگزین میشوند.
یا محدودهای از کاراکترها را برای جانشین شدن تعیین نمود:
مثال:
$ cat file7 | tr '[A-Z]' '[a-z]' > file8
این تمام حروف بزرگ در متن را به حروف کوچک تبدیل میکند.
در این دستور چندین کلمه خاص برای تعیین محدودهای از کاراکترها مشخص شده است. به جدول زیر توجه کنید:
- alpha : تمام حروف
- alnum : تمام حروف
- digit : محدودهی تمام اعداد
- blank : تمام فاصلههای افقی
- space : تمام فاصلههای افقی یا عمودی
- cntrl : تمام کاراکترهای کنترلی
- lower : تمام حروف کوچک
- upper : تمام حروف بزرگ
- print : تمام کاراکترهای قابل چاپ
مثال:
$ cat file7 | tr [:upper:] [:lower:] > file8
این دستور تمام حروف بزرگ متن را به حروف کوچک تبدیل میکند.
استفاده از آپشن s
با استفاده از این آپشن میتوان دنبالهای از کاراکترهای پشت سرهم را به یک کاراکتر تبدیل کرد.
مثال:
$ echo "baroooooon b" | tr -s 'o ' 'a '
منجر به تولید خروجی زیر میشود:
baran b
استفاده از آپشن d
این آپشن برای حذف کاراکترهای مشخص شده استفاده میشود.
مثال:
$ cat file11 | tr -d 'soft' > file12
در اینجا تمام کاراکترهای s , o , f ,t از فایل file11 حذف شده و نتیجه در داخل file12 ذخیره میشود.
دستور sort
این دستور برای مرتبط کردن خطوط یک فایل مورد استفاده قرار میگیرد. شکل کلی این دستور به صورت زیر است:
sort [option] filename
نکته: همانطور که در صفحهی man sort نیز ذکر شده است، برای اجرای صحیح دستور sort ، باید ابتدا دستور export LC_ALL=C انجام شود.
فایل با محتویات زیر را در نظر بگیرید:
$ cat letters.txt b D c A C B d a
پس از اجرای دستور sort، خروجی زیر بر روی صفحهی نمایش ظاهر میشود.
$ sort letters.txt A B C D a b c d
آپشن r
این آپشن نتایج جستوجو را معکوس میکند.
مثال:
$ sort -r letters.txt d c b a D C B A
آپشن f
این آپشن بزرگی و کوچکی حروف را مد نظر قرار نمیدهد.
$ sort -f letters.txt A a B b C c D d
آپشن n
فایل با محتویات زیر را در نظر بگیرید:
$ cat numbers.txt 5 4 12 1 3 56
در صورتی که از دستور sort استفاده شود، نتیجه به صورت زیر خواهد بود:
$ sort numbers.txt 1 12 3 4 5 56
که نتیجهی مطلوبی نیست. برای مرتب سازی طبق مقدار اعداد میتوان از آپشن n استفاده کرد.
مثال:
$ sort -n numbers.txt 1 3 4 5 12 56
آپشن b
این آپشن فضای خالی ابتدای خط را نادیده میگیرد. و مرتب سازی را بدون درنظر گرفتن آنها انجام میدهد.
آپشن u
این آپشن خطوط تکراری را حذف و تنها یکبار نمایش میدهد
مثال:
$ cat blank_letters.txt b D C c A C C B d a a $ sort -s -u blank_letters.txt A B C D a b c d
آپشن k
در صورتی که متن مورد نظر از چندین ستون تشکیل شده باشد، میتوان از این
آپشن برای مرتب کردن متن بر اساس یک ستون خاص استفاده کرد. به طور پیش فرض
تفکیک هر ستون از ستون دیگر با استفاده از فاصله انجام میشود. (تعداد
فاصلهها در نظر گرفته نمیشود)
مثال:
$ ls -al | sort -k5 total 36 -rw-r--r-- 1 alan alan 14 May 9 00:12 numbers.txt -rw-r--r-- 1 alan alan 16 May 9 00:00 letters.txt -rw-r--r-- 1 alan alan 16 May 9 00:40 blank_letters.txt -rw-r--r-- 1 alan alan 20 May 9 00:33 blank_letters2.sorted -rw-r--r-- 1 alan alan 20 May 9 00:33 blank_letters2.txt -rw-r--r-- 1 alan alan 20 May 9 00:37 blank_letters3.txt -rw-r--r-- 1 alan alan 84 May 8 23:15 file1.txt drwxr-xr-x 3 alan alan 4096 May 8 23:13 .. drwxr-xr-x 2 alan alan 4096 May 9 00:40 .
در این مثال خروجی دستور ls بر اساس ستون پنجم خروجی مرتب شده است.
آپشن t
در حالت قبل و زمانی که از آپشن k به تنهایی مورد استفاده قرار میگرفت،
تفکیک ستونها به وسیلهی فاصلهای که بین آنها وجود داشت انجام میگرفت.
ولی با استفاده از آپشن t میتوان از هر نوع کاراکتری برای تفکیک کردن
ستونهای یک متن استفاده کرد.
مثال:
$ cat /etc/passwd | head | sort -t: -k4 -n root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh games:x:5:60:games:/usr/games:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync
در این مثال ستونهای متن با استفاده از کاراکتر : از هم تفکیک شدهاند و مرتب سازی طبق مقدار اعداد ستون چهارم متن انجام شده است.
دستور uniq
از این دستور میتوان برای حذف همه سطرها یا ستونهای تکراری در متن استفاده نمود.
مثال
$ sort namesd.txt | uniq
که مشابه دستور زیر در بخش قبل است
$ sort –u namesd.txt
آپشن c
این آپشن هر خط را به همراه تعداد تکرار آن نمایش میدهد
مثال:
$ uniq –c namesd.txt 2 Alex Jason:200:Sales 2 Jhm Thomas:100:Marketing 1 Madison Randy:300:Product Development 1 baroon Singh:500:Sales 1 Sanjay Gupta:400:Support
آپشن d
این آپشن تنها خطهایی که بیش از یکبار تکرار شدهاند را نمایش میدهد.
$ uniq –cd namesd.txt 2 Alex Jason:200:Sales 2 Jhm Thomas:100:Marketing
منابع:
head tail
tail
tail
tr
tr
tr
sort
uniq
Eman ۲۱ فوریهٔ ۲۰۱۲، ساعت ۰۷:۳۸ (UTC)