برش
La برش برنامه برای استخراج بخشی از متن از یک خط و خروجی بخش استخراج شده به خروجی استاندارد استفاده می شود. می تواند چندین آرگومان فایل یا ورودی را از ورودی استاندارد بپذیرد.
تعیین بخشی از خطی که باید استخراج شود تا حدودی ناخوشایند است و با استفاده از گزینه های زیر مشخص می شود:
جدول 20-3: برش گزینه های انتخاب
توضیحات گزینه
توضیحات گزینه
-c char_list بخشی از خط تعریف شده توسط را استخراج کنید char_list. فهرست ممکن است از یک یا چند محدوده عددی جدا شده با کاما تشکیل شده باشد.
-f فیلد_لیست یک یا چند فیلد را از خط استخراج کنید که توسط
فیلد_لیست. فهرست ممکن است شامل یک یا چند فیلد یا محدوده فیلد باشد که با کاما از هم جدا شده اند.
-d delim_char چه زمانی -f مشخص شده است، استفاده کنید delim_char به عنوان شخصیت تعیین کننده میدان. به طور پیش فرض، فیلدها باید با یک کاراکتر برگه جدا شوند.
--complement کل خط متن را استخراج کنید، به جز آن بخش ها
مشخص شده توسط -c و / یا -f.
همانطور که می بینیم، راه برش متن استخراج شده نسبتاً غیر قابل انعطاف است. برش بهتر است برای استخراج متن از فایل هایی که توسط برنامه های دیگر تولید می شوند، به جای متنی که مستقیماً توسط انسان تایپ می شود، استفاده شود. ما نگاهی به ما خواهیم داشت distros.txt فایل کنید تا ببینید آیا آنقدر "تمیز" است که نمونه خوبی برای ما باشد برش مثال ها. اگر استفاده کنیم گربه با -A گزینه، ما می توانیم ببینیم که آیا فایل مورد نیاز ما از فیلدهای جدا شده از برگه ها را برآورده می کند:
[me@linuxbox ~]$ cat -A distros.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
[me@linuxbox ~]$ cat -A distros.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
خوب بنظر میرسه. بدون فضای جاسازی شده، فقط کاراکترهای یک برگه بین فیلدها. از آنجایی که فایل به جای فاصله از برگه ها استفاده می کند، ما از آن استفاده خواهیم کرد -f گزینه استخراج فیلد:
[me@linuxbox ~]$ cut -f 3 distros.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
[me@linuxbox ~]$ cut -f 3 distros.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
چون ما توزیع فایل جدا شده از برگه است، بهتر است از آن استفاده کنید برش برای استخراج فیلدها به جای کاراکترها. این به این دلیل است که وقتی یک فایل با زبانه جدا می شود، بعید است که هر خط دارای همان تعداد کاراکتر باشد، که محاسبه موقعیت کاراکترها در داخل خط را دشوار یا غیرممکن می کند. با این حال، در مثال بالا، اکنون فیلدی را استخراج کردهایم که خوشبختانه حاوی دادههایی با طول یکسان است، بنابراین میتوانیم با استخراج سال از هر خط نشان دهیم که استخراج کاراکتر چگونه کار میکند:
[me@linuxbox ~]$ cut -f 3 distros.txt | برش -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
[me@linuxbox ~]$ cut -f 3 distros.txt | برش -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
2007
2007
2006
2006
2008
2006
2008
2006
2007
2007
2006
2006
2008
2006
2008
2006
با دویدن برش برای بار دوم در لیست ما، میتوانیم موقعیتهای 7 تا 10 کاراکتر را استخراج کنیم که مربوط به سال در فیلد تاریخ ما است. را 7-10 علامت گذاری نمونه ای از یک محدوده است. را برش صفحه man حاوی توضیحات کاملی از نحوه تعیین محدوده است.
در حال گسترش برگه ها
distros.txt فایل برای استخراج فیلدها با استفاده از فرمت ایده آل است برش. اما اگر فایلی را بخواهیم که بتوان به طور کامل با آن دستکاری کرد چه میشود برش توسط کاراکترها، به جای فیلدها؟ این امر مستلزم این است که کاراکترهای برگه داخل فایل را با تعداد فاصله های مربوطه جایگزین کنیم. خوشبختانه بسته گنو کوروتیلز دارای ابزاری برای آن است. تحت عنوان گسترش، این برنامه یک یا چند آرگومان فایل یا ورودی استاندارد را می پذیرد و متن اصلاح شده را به خروجی استاندارد خروجی می دهد.
اگر خودمان را پردازش کنیم distros.txt پرونده با گسترش، ما می توانیم از آن استفاده کنیم برش - ج برای استخراج طیف وسیعی از کاراکترها از فایل. برای مثال، میتوانیم از دستور زیر برای استخراج سال انتشار از فهرست خود، با گسترش فایل و استفاده از آن استفاده کنیم. برش برای استخراج هر کاراکتر از موقعیت بیست و سوم تا انتهای خط:
[me@linuxbox ~]$ گسترش distros.txt | cut -c 23-
Coreutils نیز فراهم می کند گسترش ندادن برنامه ای برای جایگزینی زبانه ها برای فضاها.
هنگام کار با فیلدها، می توان به جای کاراکتر تب، جداکننده فیلد متفاوتی را تعیین کرد. در اینجا اولین فیلد را از قسمت استخراج می کنیم / etc / passwd فایل:
[me@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | سر
دیمون ریشه
[me@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | سر
دیمون ریشه
bin sys همگام بازی های مرد lp ایمیل اخبار
bin sys همگام بازی های مرد lp ایمیل اخبار
با استفاده از -d گزینه، ما می توانیم کاراکتر کولون را به عنوان جداکننده فیلد مشخص کنیم.