<Попередній | зміст | Наступна>
вирізати
Команда вирізати Програма використовується для вилучення розділу тексту з рядка і виведення вилученого розділу на стандартний вихід. Він може приймати декілька аргументів файлу або введення зі стандартного введення.
Вказати ділянку рядка, який потрібно витягти, є дещо незручним і визначається за допомогою таких параметрів:
Таблиця 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 ми можемо вказати двокрапку як роздільник поля.