Як визначити роздільник "вкладки" за допомогою "вирізати" в BASH?


215

Ось приклад використання cutдля розбиття вводу на поля з використанням роздільника пробілу та отримання другого поля:

cut -f2 -d' '

Як роздільник може бути визначений як закладка, а не пробіл?



4
Tab - роздільник за замовчуванням. cut -f 2
— Melah

Відповіді:


301

Два способи:

Натисніть Ctrl+, Vа потім Tab.

cut -f2 -d'   ' infile

або напишіть так:

cut -f2 -d$'\t' infile

10
$ '' - башізм, AFAIR
— poige

8
Жоден з них не працює в Windows (наприклад, Git Bash). Використовуйте відповідь @ Mikel там (роздільник за замовчуванням - вкладка, просто опустіть -dаргумент).
— Ахмед Фасіх


4
@poige, що походить ksh93, ні bash. Це підтримується ksh93, zsh, bash, mksh та FreeBSD sh (принаймні, це може перейти до наступної великої реверсії стандартної специфікації POSIX дляsh ).
— Стефан Шазелас


191

За замовчуванням використовується вкладка.

Див . Сторінку "Вирізана людина" .

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

Тож варто просто написати

cut -f 2

2
Oops не помітили цього рядка.
— Мухаммед Хасан Хан

4
Але, напевно, завжди безпечніше чітко згадувати такі прапори як для читабельності, так і для переносимості. Я можу уявити, що деякі люди, що розробляють cutдля Windows, не дотримуватимуться повного стандарту.
— Віллем Ван Онсем

3
На це слід прийняти відповідь: найпростіший код, найпростіше пояснення. ви прибивали це: youtube.com/watch?v=dpNTHl7y45Y
— neuronet

5
Ця відповідь змінила моє життя
— matheeeny

1
@WillemVanOnsem, якщо хтось пише версію cutдля Windows і не дотримується специфікації POSIX для неї, немає підстав припускати, що будь-який сценарій POSIX буде працювати з цією системою. Дотримуйтесь визначених POSIX функцій. Не намагайтеся допускати гіпотетичні майбутні невідповідні реалізації; це не те, що означає «портативність».
— Wildcard

12
awk -F '\t' '{ print $2 }' inputfile

Це витягує друге поле, обмежене вкладками кожного рядка введення з inputfile.


10

Більш загально, не вимагаючи жодних невидимих ​​символів: Використовуйте trдля перетворення роздільників у формат, який можна легше вказати cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr це простий, але потужний інструмент відповідності та заміни символів.


1
Але що робити, якщо вхід є abc(space)def(tab)ghi? Ваша відповідь дасть результат def, але вона повинна поступитися ghi. Аналогічно, якщо вхід є ABC(tab)DEF(space)GHI, ваша відповідь дасть результат DEF, але він повинен дати результат DEF(space)GHI.
— G-Man

@ G-Man: Розділювач простору був лише прикладом. Використовуйте будь-який роздільник, який підходить для ваших даних - наприклад, кома. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
— nobar

... Але так, якщо роздільник повинен бути вкладкою, то мій підхід не спрацює.
— nobar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.