از دستور 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 را بر روی فایل متنی فوق توضیح خواهیم داد.
جهت استخراج کردن یک ستون مشخص از یک فایل از سوئیچ 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 را میتوانید زمانی این دستور را با خروجی استاندارد دستورات دیگر ترکیب میکنید مشاهده نمایید مثال زیر نشان میدهد که شما چگونه میتوانید فقط اطلاعات مفید را از خروجی دستور 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 ( جستجوی رشته درون فایل ) را ببینید