Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

вирізати

Команда вирізати Програма використовується для вилучення розділу тексту з рядка і виведення вилученого розділу на стандартний вихід. Він може приймати декілька аргументів файлу або введення зі стандартного введення.

Вказати ділянку рядка, який потрібно витягти, є дещо незручним і визначається за допомогою таких параметрів:


Таблиця 20-3: вирізати Параметри вибору


Опція Опис

Опція Опис

-c список_символів Витягніть частину лінії, визначену за допомогою список_символів. Список може складатися з одного або кількох числових діапазонів, розділених комами.


-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 ~]$ вирізати -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 ~]$ вирізати -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, що відповідає року в нашому полі дати. The 7-10 позначення є прикладом діапазону. The вирізати Довідкова сторінка містить повний опис того, як можна вказати діапазони.


Розгортання вкладок

Команда distros.txt файл ідеально відформатований для вилучення полів за допомогою вирізати. Але що, якби нам потрібен файл, яким можна було б повністю маніпулювати вирізати символами, а не полями? Для цього потрібно замінити символи табуляції у файлі відповідною кількістю пробілів. На щастя, пакет GNU Coreutils містить інструмент для цього. Названий Розширювати, ця програма приймає або один або кілька аргументів файлу, або стандартне введення, і виводить модифікований текст на стандартний вихід.

Якщо ми обробляємо наші distros.txt файл з Розширювати, ми можемо використовувати розрізати -c для вилучення будь-якого діапазону символів з файлу. Наприклад, ми можемо використати таку команду, щоб витягти рік випуску з нашого списку, розгорнувши файл і скориставшись вирізати щоб витягти кожен символ з двадцять третьої позиції до кінця рядка:

[me@linuxbox ~]$ розгорнути distros.txt | cut -c 23-

Coreutils також надає нерозширюватися програма для заміни пробілів табуляціями.


Під час роботи з полями можна вказати інший роздільник поля, а не символ табуляції. Тут ми витягнемо перше поле з / etc / passwd Файл:


[me@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | голова

root-демон

[me@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | голова

root-демон


bin sys sync ігри man lp mail новини

bin sys sync ігри man lp mail новини


Використання -d ми можемо вказати двокрапку як роздільник поля.


Найпопулярніші хмарні обчислення ОС на OnWorks: