Як визначити роздільник "вкладки" за допомогою "вирізати" в 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.