فهرست مندرجات
دستور cut ( استخراج بخشی از متن )
از دستور cut جهت استخراج کردن بخشی از متن یک فایل استفاده میشود در این بخش برای توضیح دستور cut و نحوه عملکرد آن یک فایل متنی به نام text.txt را از قبل با محتوای زیر ایجاد کرده ایم
-> $cat text.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
در ادامه بعضی از مهمترین کاربردهای دستور cut را بر روی فایل متنی فوق توضیح خواهیم داد.
کاربردهای دستور cut
انتخاب ستونی از کاراکترها
جهت استخراج کردن یک ستون مشخص از یک فایل از سوئیچ c-
به همراه دستور cut استفاده میشود. به عنوان مثال دستور زیر دومین ستون کاراکتری از هر خط فایل text.txt را نمایش میدهد.
-> $cut -c2 text.txt a p s
انتخاب ستونی از کاراکترها با استفاده از رنج
رنج کاراکترها میتواند توسط دستور cut از یک فایل با مشخص کردن ابتدا و انتهای موقعیت جدا کننده با «-»
استخراج شود.
به عنوان مثال دستور زیر سه کاراکتر هر خط از فایل text.txt را استخارج میکند.
-> $cut -c1-3 text.txt cat cp ls
انتخاب ستونی از کاراکترها با استفاده از شروع و پایان بخش
حتی شروع و پایان بخش مورد نظر از متن در یک فایل جهت استخراج شدن میتواند توسط سوئیچ c-
به دستور cut ارسال شود. به عنوان مثال با استفاده از دستور زیر فقط شروع بخش را قبل از «-»
مشخص میکنیم در این مثال از سومین کاراکتر تا انتهای هر خط فایل text.txt استخراج میشود
توجه کنید که سومین کاراکتر خط اول فایل کاراکتر t
و سومین کاراکتر خط دوم و سوم آن blank
است.
ٰ-> $cut -c3- text.txt t command for file oriented operations. command for copy files or directories. command to list out files and directories with its attributes.
یا به عنوان مثالی دیگر با استفاده از دستور زیر ۸ کاراکتر از ابتدای هر خط text.txt را استخراج میکنیم.
-> $cut -c-8 text.txt cat comm cp comma ls comma
انتخاب یک فیلد خاص از یک فایل
به جای مشخص کردن شماره کاراکترها در دستور cut اگر شما میخواهید یک فیلد کامل را استخراج کنید میتوانید از ترکیب دو سوئیچ f-
و d-
استفاده نمایید سوئیچ f-
به معنی field میباشد و مشخص میکند که شما قصد دارید یک فیلد خاص را استخراج کنید سوئیچ d-
نیز به معنی delimiter ( جدا کننده) میباشد و فیلد جدا کننده ای که در فایل ورودی استفاده شده را مشخص میکند.به عنوان مثال با استفاده از دستور زیر فقط اولین فیلد هر خط از فایل etc/passwd/ که با استفاده از جدا کننده :
یا colon است استخراج میکنیم. توجه کنید که اولین فیلد هر خط از فایل etc/passwd/ مشخص کننده username است.
-> $cut -d':' -f1 /etc/passwd root bin daemon adm lp sync shutdown
انتخاب چندین فیلد از یک فایل
شما میتوانید همچنین بیش از یک فیلد را از یک فایل یا stdout استخراج کنید. به عنوان مثال با استفاده از دستور زیر فیلد اول و ششم از فایل etc/passwd/ که به ترتیب مربوط به username و home directory کاربران است را استخراج میکنیم.
-> $grep "/bin/bash" /etc/passwd|cut -d':' -f1,6 root:/root phoenix:/home/phoenix
همچنین جهت نمایش یک رنج از فیلدهای مشخص میتوانیم فیلد شروع و فیلد پایانی را با استفاده از سوئیچ f- به دستور cut ارسال کنیم. به عنوان مثال با استفاده از دستور زیر فیلدهای 1 تا 4 و همینطور فیلدهای 6 و 7 از فایل etc/passwd/ را توسط دستور cut استخراج میکنیم.
-> $grep "/bin/bash" /etc/passwd|cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash phoenix:x:1000:1000:/home/phoenix:/bin/bash
انتخاب فیلدها فقط زمانیکه یک خط شامل جدا کننده باشد
در فایل etc/passwd/ اگر شما از delimiter یا جدا کننده دیگری به جز :
یا colon استفاده نمایید دستور cut کل خط را نمایش خواهد داد. به عنوان مثال در دستور زیر به جای delimiter از علامت pip یا |
استفاده کرده ایم و دستور cut نیز به سادگی کل خط را نمایش میدهد. حتی اگر هیچ خطی را با جداکننده |
پیدا نکند.
-> $grep "/bin/bash" /etc/passwd|cut -d'|' -f1 root:x:0:0:root:/root:/bin/bash phoenix:x:1000:1000:phoenix:/home/phoenix:/bin/bash
اما با استفاده از سوئیچ s-
دستور cut میتوانیم تنها خطوطی را که شامل جدا کننده خاصی هستند را فیلتر کرده و نمایش دهیم.به عنوان مثال دستور زیر هیچ خروجی ای را نمایش نمیدهد. چرا که دستور cut هیچ خطی را که دارای جدا کننده | باشد را نمیتواند در فایل etc/passwd/ پیدا کند.
-> $grep "/bin/bash" /etc/passwd|cut -d'|' -s -f1
انتخاب همه فیلدها به جز فیلدهای خاص
جهت مشخص کردن فیلدهای خاص از گزینه complement–
به همراه دستور cut استفاده میشود. به عنوان مثال با استفاده از دستور زیر همه فیلدهای فایل etc/passwd/ به جز فیلد 7 آن نمایش داده میشود.
-> $grep "/bin/bash" /etc/passwd|cut -d':' --complement -s -f7 root:x:0:0:root:/root phoenix:x:1000:1000:phoenix:/home/phoenix
تغییر خروجی جداکننده برای نمایش
بصورت پیش فرض خروجی جداکننده با ورودی جداکننده که ما با استفاده از سوئیچ d-
در دستور cut مشخص میکنیم یکسان است جهت تغییر خروجی جدا کننده برای نمایش از گزینه output-delimiter–
استفاده میشود در این مثال ورودی جدا کننده علامت :
یا colon اما خروجی جداکننده علامت #
یا hash میباشد.
-> $grep "/bin/bash" /etc/passwd|cut -d':' -s -f1,6,7 --output-delimiter='#' root#/root#/bin/bash phoenix#/home/phoenix#/bin/bash
ترکیب دستور cut با دیگر دستورات
قدرت دستور cut را میتوانید زمانی این دستور را با خروجی استاندارد دستورات دیگر ترکیب میکنید مشاهده نمایید مثال زیر نشان میدهد که شما چگونه میتوانید فقط اطلاعات مفید را از خروجی دستور ps
استخراج کنید. همچنین در این مثال نشان داده ایم که چگونه میتواند خروجی دستور ps
را با استفاده از دستورات grep
و sed
قبل از خروجی نهایی که توسط cut تولید میشود فیلتر نمود.
-> $ps axu|grep python|sed 's/\s\+//g'|cut -d' ' -f2,11- root6930.00.23462368776?Ssl08:300:01/usr/bin/python3-Es/usr/sbin/firewalld--nofork--nopid phoenix13070.00.286167210784?Sl08:300:04python3/usr/bin/dnfdragora-updater phoenix13160.00.01326520?S08:300:00/usr/bin/python3/usr/bin/blueberry-tray phoenix13550.00.475246816332?Sl08:300:00/usr/bin/python2/usr/lib/blueberry/blueberry-tray.py phoenix16270.00.01460288?S08:300:00python2/usr/lib/blueberry/safechild/usr/sbin/rfkillevent root16360.00.15890885036?Ssl08:300:04/usr/bin/python3/usr/share/dnfdaemon/dnfdaemon-system phoenix293170.00.01197201016pts/2S+20:040:00grep--color=autopython
برای توضیحات تکمیلی در ارتباط با دستور cat ( نمایش فایل متنی, الحاق چند فایل و ... ) و دستور Grep ( جستجوی رشته درون فایل ) را ببینید