LPIC-1Linux

آموزش Lpic 1 لینوکس : پردازش متون با فیلترها (Process text streams using filters)

آموزش لینوکس پردازش متون با فیلترها (Process text streams using filters)

در این پست قرار است درباره پردازش متون با فیلترها صحبت کنیم، همانطور که می دونید تقریبا همه جای لینوکس متن داریم و ما میخواهیم توضیح بدیم پردازش متون به چه صورت انجام می شود.

آموزش پردازش متون با فیلترها

همانطور که در پست قبل توضیح دادیم لینوکس سه حالت دارد:

  1. stdin: منظور از آن Standard input یا ورودی استاندارد می باشد که در فایل تشریحی مقدار ۰ به آن تخصیص می یابد که به آن STDIN نیز گفته میشود. هر سیستم یونیکس یا لینوکس مقدار پیش فرض ورودی را از STDIN میخواند.
  2. stdout: منظور از آن Standard Output یا خروجی استاندارد می باشد که در فایل تشریحی مقدار ۱ به آن تخصیص می یاید که به آن STDOUT نیز گقته میشود. هر سیستم یونیکس یا لینوکس مقدار پیشفرض خروجی استاندارد را در STDOUT می نویسد.
  3. stderr: منظور از آن Standard Error یا خطای استاندارد می باشد که در فایل تشریحی مقدار ۲ به آن تخصیص می یابد که به آن STDERR نیز گفته میشود. هر سیستم یونیکس یا لینوکس پیام پیشفرش خطا را در STDERR می نویسد.
The standard streams for input, output, and error | پردازش متون با فیلترها
The standard streams for input, output, and error | پردازش متون با فیلترها

پایپ Piping ( | ) در لینوکس

پایپ کردن در لینوکس را می توان یکی از کاربردی ترین کار ها دانست. توسط پایپ کردن دو یا چند دستور در محیط لینوکسی خود قادر خواهید بود خروجی های مرتبی دریافت کنید و کار های مفید زیادی با سیستم لینوکسی خود انجام دهید.

پایپ Piping ( | ) در لینوکس | پردازش متون با فیلترها
پایپ Piping ( | ) در لینوکس | پردازش متون با فیلترها

حتما تا به حال برای شما پیش آمده است که تصمیم داشته اید دستوری اجرا کنید و خروجی آن دستور را به عنوان ورودی، به دستور دیگری بدهید.

دستور ls -1 یک لیست می گیرد و زیر هم می نویسد، حالا می میخواهیم آن را sort کنیم پس خروجی آن را به دستور sort می دهیم:

user@funlife:~/w/lpic/101$ ls -1 | sort -r
you
neda
lpi
amir
62
12

تغییر مسیر Redirection ( < ) در لینوکس

مفهوم بسیار ساده ولی کاربردی دارد < یعنی خروجی خود را بریز به چیز دیگر، برای مثال ما خروجی دستور ls را ریختیم داخل یک فایل متنی:

user@funlife:~/w/lpic/101$ ls -ltrh > directory_data

حالا فایل متنی directory_data را باز می کنیم:

user@funlife:~/w/lpic/101$ cat directory_data 
total 0
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 12
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 62
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 neda
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 lpi
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 you
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:34 amir
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:37 directory_data

دستور cat

دستور cat که از کلمه لاتین Concatenate به معنی الحاق و به هم پیوستن گرفته شده یک یا چند فایل را می خواند و سپس آنها را به یک خروجی استاندارد کپی می کند و به این صورت به کار گرفته می شود : […cat file] در بیشتر موارد شما می توانید cat را در مقایسه با دستور TYPE در خط فرمان داس در نظر بگیرید.

user@funlife:~/w/lpic/101$ cat > mydata
test
this is the second line
bye
user@funlife:~/w/lpic/101$ cat mydata 
test
this is the second line
bye
user@funlife:~/w/lpic/101$ cat mydata directory_data 
test
this is the second line
bye
total 0
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 12
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 62
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 neda
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 lpi
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:33 you
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:34 amir
-rw-rw-r-- 1 lpi lpi 0 Jan  4 17:37 directory_data

ctrl+d در اینجا stream را تمام می کند ولی ctrl+c به طور کلی دستور را قطع میکنه

در صورتی که در cat از – استفاده کنیم به صورت عادی به کاراکتر – که میرسد از ما ورودی دریافت می کند ولی اگر ورودی دستور دیگری را به cat بدیم، ورودی استاندارد آن را بجای – قرار می دهد مانند زیر:

user@funlife:~/w/lpic/101$ sort my_file | cat my_file2 - my_file

در دستور بالا خروجی اول محتوای my_file2 را می نویسد و بعد sort محتوای my_file را جای – قرار می دهد و می نویسد و سپس دوباره خود my_file را بدون sort می نویسد.

دستور od در لینوکس

od به معنی dump files in octal and other formats است. od  تو حالت عادی محتوای فایل ما رو به صورت decimal نمایش می دهد.

user@funlife:~/w/lpic/101$ od mydata 
0000000 062564 072163 072012 064550 020163 071551 072040 062550
0000020 071440 061545 067543 062156 066040 067151 005145 074542
0000040 005145
0000042

در صورت استفاده از سوئیچ t- اگر c قرار دهیم (tc-) کاراکتر را نمایش می دهد ولی با a قرار دهیم (ta-) اسم کاراکتر را نمایش می دهد.

دستور split در لینوکس

از دستور split در سیستم عامل لینوکس برای تکه کردن فایل های کوچکتر استفاده می شود و شکل کلی آن به صورت زیر است:

split [options] file
split -b 300k test.pdf -d

ما یک فایل mydata داریم که محتوای آن به صورت زیر است:

user@funlife:~/w/lpic/101$ cat mydata 
hello
this is second line
but as you can see we are
still writing
and this is getting longer
.
.
and longer
and longer!
user@funlife:~/w/lpic/101$ ls
mydata

حالا می خواهیم با split بگیم که 2 خط دو خط جدا کن:

user@funlife:~/w/lpic/101$ split -l 2 mydata 

الان اگه ls بگیریم محتوای ما شده 5 تا فایل xaa xab xac xad xae:

user@funlife:~/w/lpic/101$ ls
mydata    xaa  xab  xac  xad  xae

و اگه داخل هر کدام را که نگاه کنید دو خط از فایل اصلی داخل آن قرار دارد:

user@funlife:~/w/lpic/101$ cat xab
but as you can see we are
still writing

با سوئیچ b- می توانیم بگوییم به صورت چند bytes چدا شود، در مثال زیر ما 50 byte ی جدا کردیم:

user@funlife:~/w/lpic/101$ split -b50 mydata 

و سوئیچ d- هم بجای این که خروجی ما رو به حروف جدا کند مثل xaa xab xac xad xaاین کار را با عدد انجام بده xa01 xa02 xa03 xa04 xa05

حالا اگر بخواین تمام این فایل های خورد شده را مثل اول به هم وصل کنید به راحتی با دستور زیر میگیم هرچی فایل داریم که با x شروع می شود را بریز تو یک فایل به اسم originalfile

user@funlife:~/w/lpic/101$ cat x* > originalfile

wc در لینوکس

wc در لینوکس
wc در لینوکس

دستور WC نشآت گرفته از Word Count در سیستم عامل های Unix/Linux برای یافتن تعداد خط، کلمه، تعداد byte و کاراکترها در یک فایل مشخص و با استفاده از آپشن های متفاوت مورد استفاده قرار میگیرد. ساختار دستور wc همانند زیر میباشد.

# wc [options] filenames

در زیر آپشن ها و کاربردهای آنها لیست شده اند:

  • wc -l : تعداد خطوط یک فایل را نمایش میدهد.
  • wc -w : تعداد کلمات یک فایل را نمایش میدهد.
  • wc -c : تعداد byte های موجود در یک فایل را نمایش میدهد.
  • wc -m : تعداد کاراکترهای یک فایل را نمایش میدهد.
  • wc -L : تنها طول، طولانی ترین خط در یک فایل را نمایش میدهد.

اما اکنون نحوه استفاده از دستور wc به همراه آپشن ها و مثال های موجود و محدود در این پست را بررسی میکنیم. ما برای تست این دستور از فایل tecmint.txt استفاده میکنیم. ابتدا با استفاده از دستور cat محتوای فایل را مشاهده میکنیم :

[root@tecmint ~]# cat tecmint.txt
Red Hat
CentOS
Fedora
Debian
Scientific Linux
OpenSuse
Ubuntu
Xubuntu
Linux Mint
Pearl Linux
Slackware
Mandriva

1 – یک مثال ابتدایی از دستور WC

دستور wc بدون پاس دادن هیچ گونه پارامتری یک نتیچه اولیه از فایل tecmint.txt نمایش خواهد داد. که به همراه آن 3 شماره پرینت میشود. همانند مثال زیر که عدد 12 (تعداد خطوط فایل) عدد 16 (تعداد کلمات فایل) و عدد 112 (تعداد byte های فایل) میباشند.

[root@tecmint ~]# wc tecmint.txt

12  16 112 tecmint.txt

2 – شمارش تعداد خطوط فایل

برای شمارش تعداد خط در یک فایل از آپشن l- استفاده میشود، که تعداد خطوط یک فایل را نمایش میدهد. همانند دستور زیر که تعداد خطوط یک فایل را نمایش خواهد داد. در خروجی دستور زیر اولین فیلد متعلق به تعداد شماره شده و فیلد دوم نام فایل میباشد.

[root@tecmint ~]# wc -l tecmint.txt

12 tecmint.txt

3 – نمایش تعداد کلمات

با استفاده از آپشن w- به همراه دستور wc میتوانیم تعداد کلمات یک فایل را نمایش داد. دستور زیر را برای شمارش کلمات درون یک فایل تایپ کنید.

[root@tecmint ~]# wc -w tecmint.txt

16 tecmint.txt

4 – شمارش تعداد byte ها و کاراکترها

با استفاده از آپشن های c- و m- به همراه دستور wc به ترتیب تعداد کل بایت ها و کاراکترهای موجود در یک فایل نمایش داده خواهند شد.

[root@tecmint ~]# wc -c tecmint.txt

112 tecmint.txt
[root@tecmint ~]# wc -m tecmint.txt

112 tecmint.txt

5 – نمایش طول طولانی ترین خط

دستور wc امکان استفاده از آپشن L- (ال بزرگ) را دارد که برای نمایش طول طولانی ترین خط یک فایل (از لحاظ تعداد کاراکتر) مورد استفاده قرار میگیرد. در نتیجه ما طولانی ترین خط از لحاظ کاراکتری را در یک فایل خواهیم داشت.

[root@tecmint ~]# wc -L tecmint.txt

16 tecmint.txt

6 – بررسی کردن آپشن های بیشتر WC

برای اطلاعات بیشتر و کمک درباره دستور wc به سادگی دستورات wc -help یا دستور man wc (راهنمای wc) را در شل خود اجرا کنید.

[root@tecmint ~]# wc --help

Usage: wc [OPTION]... [FILE]...
  or:  wc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified.  With no FILE, or when FILE is -,
read standard input.
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
  -l, --lines            print the newline counts
  -L, --max-line-length  print the length of the longest line
  -w, --words            print the word counts
      --help            display this help and exit
      --version            output version information and exit

Report wc bugs to [email protected]
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'wc invocation'

دستورات head در tail در لینوکس

دستورات head | پردازش متون با فیلترها
دستورات head | پردازش متون با فیلترها

دستور head میاد 10 خط اول را برای ما نمایش می دهد:

root@ubuntu:~# head test

و یا با مثلا 5- فقط 5 خط اول رو نمایش می دهد.

root@ubuntu:~# head -5 test 

دستور tali هم دیقیقا مثل head کار میکنه با این تفاوت که 10 خط آخر را نمایش می دهد.

root@ubuntu:~# tali test

و یا با مثلا 5- فقط 5 خط اخر رو نمایش می دهد.

root@ubuntu:~# tali -5 test

یک نکته کاربردی: تقریبا تمام لاگ های سیستم در آدرس /var/log/syslog ذخیره می شود، حالا با سوئیچ f- میتونیم این فایل رو رصد کنیم و هر وقت اتفاق جدیدی در سیستم رخ دهد در لحظه به ما نمایش می دهد مثل وصل کردن یک USB به سیستم:

root@ubuntu:~# tali -f /var/log/syslog
tali -f var log syslog | پردازش متون با فیلترها
tali -f var log syslog | پردازش متون با فیلترها

دستورات expand و unexpand و tr چیست؟

expand | پردازش متون با فیلترها
expand | پردازش متون با فیلترها

Expand میاد تموم tab ها رو در یک فایل متنی به space تغییر میده:

user@funlife:~/w/lpic/101$ cat howcool 
lpi    5
sina    6
rubic    2
you     12
user@funlife:~/w/lpic/101$ od -tc howcool 
0000000   j   a   d   i  \t   5  \n   s   i   n   a  \t   6  \n   r   u
0000020   b   i   c  \t   2  \n   y   o   u      \t   1   2  \n
0000036
user@funlife:~/w/lpic/101$ expand howcool | od -tc
0000000   j   a   d   i                   5  \n   s   i   n   a        
0000020           6  \n   r   u   b   i   c               2  \n   y   o
0000040   u                       1   2  \n
0000051

Unexpand دقیقا برعکس Expand عمل می کند یعنی space ها را به tab تغییر می دهد ولی دو نکته دارد، اول این که اگه به صورت خالی از این دستور استفاده شود فقط space های اول رو تغییر میده ولی اگه قرار همه space ها را برسی کند باید از سوئیچ a- استفاده کنید. مورد دوم این که Unexpand فقط بر روی space هایی تغییر می دهد که دوتا space پشت هم باشد.

دستور tr که  کوتاه شده عبارت Translate است یک ابزار خط فرمان مفید است که می تواند کاراکترها را از ورودی stdin ترجمه یا پاک نماید و آن ها را بر روی stdout بنویسد.  این یک برنامه کاربردی برای دستکاری متون در خط فرمان است.

سینتکس دستور tr به صورت زیر است که در آن کاراکترها در SET1 به کاراکترهای SET2 ترجمه می شوند.

$ tr flags [SET1] [SET2]

یکی از نمونه های ساده این دستور برای تغییر حروف نوشته شده کوچک در متن به حروف انگلیسی بزرگ و برعکس است. به دستور زیر توجه کنید:

$ cat linux.txt
 

linux is my life
 
linux has changed my life
 
linux is best and everthing to me..:)
 
$ cat domains.txt | tr [:lower:] [:upper:]
 

LINUX IS MY LIFE
 
LINUX HAS CHANGED MY LIFE
 
LINUX IS BEST AND EVERTHING TO ME..:)

شما می توانید از دستور زیر برای تغییر همه حروغ کوچک به حروف بزرگ در فایل استفاده کنید:

$ cat linux.txt | tr [a-z] [A-Z]
 
LINUX IS MY LIFE
 
LINUX HAS CHANGED MY LIFE
 
LINUX IS BEST AND EVERTHING TO ME..:)

برای ذخیره کردن نتایج نوشته شده در فایل stdout برای پردازش های بعدی می توانید از دستوراتی شبیه دستور زیر استفاده کنید:

$ cat linux.txt | tr [a-z] [A-Z] >output.txt
 
$ cat output.txt
 
 
 
LINUX IS MY LIFE
 
LINUX HAS CHANGED MY LIFE
 
LINUX IS BEST AND EVERTHING TO ME..:)

در مورد ریدایرکت کردن می توانید ورودی را به کمک ریدایرکت ورودی به tr ارسال کنید و خروجی را به کمک همین دستور به فایل بفرستید:

$ tr [a-z] [A-Z] < linux.txt >output.txt

یکی دیگر از قابلیت های کاربردی این دستور این است که می توانید از فلگ -d برای پاک کردن کاراکترها استفاده کنید. مثلا برای حذف اسپیس ها در نام دامنه می توانید از دستور زیر کمک بگیرید:

$ cat domains.txt
 
 
 
www. tecmint. com
 
www. fossmint. com
 
www. linuxsay. com
 
$ cat domains.txt | tr -d ''
 
 
 
www.tecmint.com
 
www.fossmint.com
 
www.linuxsay.com

اگر در یک بخش از متن کاراکترهای تکراری وجود دارد ، می توانید از فلگ -s برای فشرده سازی کاراکترها استفاده کنید و تنها یک کاراکتر را نمایش دهید:

$ cat domains.txt
 
 
 
www.tecmint.....com
 
www.fossmint.com
 
www.linuxsay.com
 
$ cat domains.txt | tr -s ''
 
 
 
www.tecmint.com
 
www.fossmint.com
 
www.linuxsay.com

دستور زیر بیان می کند که همه حروف باید پاک شوند و تنها UID باقی بماند. برای اینکار از گزینه -c استفاده می شود:

$ echo "My UID is $UID" | tr -cd "[:digit:]\n"
 
OR
 
$ echo "My UID is $UID" | tr -d "a-zA-Z"

در مثال زیر یک خط واحد از کلمات را به خطوط مختلف تبدیل می کنیم.

$ echo "My UID is $UID"
 
 
 
My UID is 1000
 
 
 
$ echo "My UID is $UID" | tr " "  "\n"
 
 
 
My
 
UID
 
is
 
1000

این گزینه به مثال قبلی مان مربوط است. شما می توانید خطوط متعددی از کلمات را به یک جمله واحد تبدیل کنید. برای اینکار از دستوری شبیه دستور زیر کمک بگیرید:

$ cat uid.txt
 
 
 
My
 
UID
 
is
 
1000
 
 
 
$ tr "\n" " " < uid.txt
 
 
 
My UID is 1000

همچنین می توانید به کمک این دستور یک کاراکتر واحد را به کاراکتر دیگری تبدیل کنید. به مثال زیر توجه نمایید:

$ echo "nextadmin.net=>Linux-HowTos,Guides,Tutorials" | tr " " ":"
 
 
 
nextadmin.net:=>Linux-HowTos,Guides,Tutorials

دستور pr در لینوکس

یک ابزار قدیمی برای پرینتر های خیلی قدیمی هست که امروزه تقریبا کاربردی ندارد ولی کارش این است که یک فایل متنی رو برای پرینتر های قدیمی مرتب می کند:

pr mydata 


2015-01-04 17:58                      mydata                      Page 1


hello
this is second line
but as you can see we are
still writing
and this is getting longer
.
.
and longer
and longer!

دستور nl در لینوکس

دستور nl در لینوکس | پردازش متون با فیلترها
دستور nl در لینوکس | پردازش متون با فیلترها

یک ابزار ساده برای شماره گذاری خط ها:

user@funlife:~/w/lpic/101$ nl mydata  | head -3
     1    hello
     2    this is second line
     3    but as you can see we are

ولی عملا دستور cat با سوئیچ n- هم دقیقا همین کار را می کند:

user@funlife:~/w/lpic/101$ cat -n mydata  | head -3
     1    hello
     2    this is second line
     3    but as you can see we are

دستور fmt در لینوکس

این دستور متن را reformat می کند یعنی به صورت پیشفرض با عرض 60 کل متن ما را پشت هم می نویسد و با سوئیچ w- می توان از 60 به هر عددی تغییر داد.

user@funlife:~/w/lpic/101$ fmt mydata 
hello this is second line but as you can see we are still writing and
this is getting longer .  .  and longer and longer!

دستور sort و uniq در لینوکس

دستور sort که از اسمشم مشخص است شما یه ورودی بهش میدید و متن شما رو مرتب میکنه، به صورت پیشفرض بر اساس حروف الفبا اینکار را میکند. برای مثال ما دو فایل متنی به اسم های  uses و howcool داریم:

user@funlife:~/w/lpic/101$ cat uses 
you fedora
lpi ubuntu
rubic windows
neda mac
user@funlife:~/w/lpic/101$ cat howcool 
lpi    5
sina    6
rubic    2
you     12

حالا اگه این فایل ها رو sort کنیم به این شکل می شود:

user@funlife:~/w/lpic/101$ sort howcool uses 
lpi    5
lpi ubuntu
neda mac
rubic    2
rubic windows
sina    6
you     12

همانطور که دیدید میشه از چند ورودی عملیات را انجام داد.

تقریبا تمام سئویچ های sort را که در man sort وجود دارد به شکل زیر است، برای نمونه سوئیچ r- عملیات sort پیشفرض را برعکس انجام میدهد یعنی بجای A to Z از Z to A صورت می کند.

       Write sorted concatenation of all FILE(s) to standard output.

       With no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are mandatory for short options
       too.  Ordering options:

       -b, --ignore-leading-blanks
              ignore leading blanks

       -d, --dictionary-order
              consider only blanks and alphanumeric characters

       -f, --ignore-case
              fold lower case to upper case characters

       -g, --general-numeric-sort
              compare according to general numerical value

       -i, --ignore-nonprinting
              consider only printable characters

       -M, --month-sort
              compare (unknown) < 'JAN' < ... < 'DEC'

       -h, --human-numeric-sort
              compare human readable numbers (e.g., 2K 1G)

       -n, --numeric-sort
              compare according to string numerical value

       -R, --random-sort
              shuffle, but group identical keys.  See shuf(1)

       --random-source=FILE
              get random bytes from FILE

       -r, --reverse
              reverse the result of comparisons

       --sort=WORD
              sort according to WORD: general-numeric -g, human-numeric -h,
              month -M, numeric -n, random -R, version -V

       -V, --version-sort
              natural sort of (version) numbers within text

       Other options:

       --batch-size=NMERGE
              merge at most NMERGE inputs at once; for more use temp files

       -c, --check, --check=diagnose-first
              check for sorted input; do not sort

       -C, --check=quiet, --check=silent
              like -c, but do not report first bad line

       --compress-program=PROG
              compress temporaries with PROG; decompress them with PROG -d

       --debug
              annotate the part of the line used to sort, and warn about
              questionable usage to stderr

       --files0-from=F
              read input from the files specified by NUL-terminated names in
              file F; If F is - then read names from standard input

       -k, --key=KEYDEF
              sort via a key; KEYDEF gives location and type

       -m, --merge
              merge already sorted files; do not sort

       -o, --output=FILE
              write result to FILE instead of standard output

       -s, --stable
              stabilize sort by disabling last-resort comparison

       -S, --buffer-size=SIZE
              use SIZE for main memory buffer

       -t, --field-separator=SEP
              use SEP instead of non-blank to blank transition

       -T, --temporary-directory=DIR
              use DIR for temporaries, not $TMPDIR or /tmp; multiple options
              specify multiple directories

       --parallel=N
              change the number of sorts run concurrently to N

       -u, --unique
              with -c, check for strict ordering; without -c, output only
              the first of an equal run

       -z, --zero-terminated
              line delimiter is NUL, not newline

       --help display this help and exit

       --version
              output version information and exit

در حالت پیشفرض sort کاراکتر به کاراکتر عمل میکنه و اول هم با کاراکتر هایی که ابتدا هستن شروع به برسی می کند و مناسب برای sort عدد نیست ولی با سوئیچ n- به راحتی می توانید sort  عددی انجام دهید.

user@funlife:~/w/lpic/101$ sort -n howcool uses 

دستور uniq تمام موارد تکراری را حذف می کند، دستور uniq همیشه در ورودی sort شده عمل می کند یعنی شما اول باید سخقف کنید و خروجی آن را به ورودی uniq بدید، در دستور زیر uniq عمل نکرده است:

user@funlife:~/w/lpic/101$ uniq what_i_have.txt 
laptop
socks
tshirt
ball
socks
glasses

ولی وقتی با sort میاد به درستی عمل می کند:

user@funlife:~/w/lpic/101$ sort what_i_have.txt | uniq 
ball
glasses
laptop
socks
tshirt

و اگه با c- بیاد تعداد تکراری بودن هر کلمه را می گوید، همچنین با u- فقط مواردی که واقعا تکراری نبودن را نمایش می دهد و برعکس آن d- فقط موارد تکراری را نشان می دهد. همچنین با f1- میتونید بگید فیلد اول رو نگاه نکن و از فیلد دوم چک کن.

دستور cut در لینوکس

دستور cut  به معنی قیچی کردن یا بریدن می باشد. یعنی همانطور که از قیچی برای بریدن قطعه ای از پارچه یا کاغذ استفاده می کنیم از دستور cut برای جداسازی قطعه ای از یک فایل و نمایش آن قطعه به شکلی دیگر استفاده می کنیم.

user@funlife:~/w/lpic/101$ cat howcool 
lpi    5
sina    6
rubic    2
you     12
user@funlife:~/w/lpic/101$ cut -f1 howcool 
lpi
sina
rubic
you

دستور paste در لینوکس

دستور paste در لینوکس | پردازش متون با فیلترها
دستور paste در لینوکس | پردازش متون با فیلترها

این دستور یک کار مفید و جالب انجام میده، شما دوتا فایل متنی دارید که یکی این است:

user@funlife:~/w/lpic/101$ cat howcool 
lpi    5
sina    6
rubic    2
you     12

و یکی این:

user@funlife:~/w/lpic/101$ cat uses 
you fedora
lpi ubuntu
rubic windows
neda mac

حالا دستور paste میاد خط اول فایل دوم را به خط اول فایل اول اضافه می کند و به ترتیب خط های بعد:

user@funlife:~/w/lpic/101$ paste howcool uses 
lpi    5    you fedora
sina    6    lpi ubuntu
rubic    2    rubic windows
you     12    neda mac

دستور join در لینوکس

دستور join شبیه join در دیتابیس می باشد کهیک فایل متنی sort شده را به یک فایل متنی sort شده دیگر join میکنه. برای مثال فایل اول ما این است:

user@funlife:~/w/lpic/101$ cat howcool 
lpi    5
sina    6
rubic    2
you     12

فایل دوم ما:

user@funlife:~/w/lpic/101$ cat uses 
you fedora
lpi ubuntu
rubic windows
neda mac

حالا فایل اول را sort میکنیم و خروجی را در فایل دیگر به اسم howcool.sorted میریزیم:

user@funlife:~/w/lpic/101$ sort howcool > howcool.sorted

و فایل دوم هم به همین صورت sort کرده و در فایلی به اسم uses.sorted می ریزیم:

user@funlife:~/w/lpic/101$ sort uses  > uses.sorted

حالا اگه این دو فایل جدید را join کنیم فقط فایل هایی نمایش داده می شود که به هم ربط داشتن و join شدن:

user@funlife:~/w/lpic/101$ join howcool.sorted uses.sorted 
lpi 5 ubuntu
rubic 2 windows
you 12 fedora

دستور sed در لینوکس

با استفاده از ابزار sed می‌توان به فیلتر کردن متن و همچنین جایگزین کردن برخی واژگان به واژگانی دیگر پرداخت، ما یک فایل داریم با محتوای زیر:

user@funlife:~/w/lpic/101$ cat uses
you fedora
lpi ubuntu
rubic windows
neda mac

حالا می خواهیم همه ubuntu ها را به debian تغییر دهیم، پس به کمک s این کار را می کنیم:

user@funlife:~/w/lpic/101$ sed 's/ubuntu/debian/' uses
you fedora
lpi debian
rubic windows
neda mac

 

Shares:

2 Comments

  • ربین
    ربین
    2021-01-03 at 12:00

    اموزش فوق العاده بود ممنونم

    Reply
  • محمد مرادی
    محمد مرادی
    2021-07-15 at 17:11

    سلام و درود خدمت شما
    ممنون بابت مطلب جامع و مفیدتون
    فقط یه نکته هستش اینکه دستوری که ده خط آخر رو نمایش میده tail هستش (:

    Reply

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *