فصل پانزدهم - فیلترهای متن

از Linuxreview Wiki
پرش به: ناوبری, جستجو


در فصل ۱۳ با دستور 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

این تمام حروف بزرگ در متن را به حروف کوچک تبدیل میکند.


در این دستور چندین کلمه خاص برای تعیین محدوده‌ای از کاراکترها مشخص شده است. به جدول زیر توجه کنید:

مثال:

$ 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)

ابزارهای شخصی
گویش‌ها
فضاهای نام
عملکردها
گشتن
کتاب‌ها
مقاله‌ها
جعبه‌ابزار