Как определить разделитель 'вкладки' с 'сокращением' в Bash?

Мое текущее решение

rm -rf "$(readlink -f "a")"; rm -f "a"

Но возможно существует что-то более легкое?

230
23.03.2017, 16:03
5 ответов

Два пути:

Нажмите Ctrl+V и затем Вкладку.

cut -f2 -d'   ' infile

или запишите это как это:

cut -f2 -d$'\t' infile
316
27.01.2020, 19:28

Вкладка является значением по умолчанию.

См. страницу справочника сокращения.

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

Таким образом, необходимо просто записать

cut -f 2
197
27.01.2020, 19:28
  • 1
    Ой не заметил ту строку. –  Muhammad Hasan Khan 30.03.2012, 18:54
  • 2
    Но, вероятно, всегда более безопасно упомянуть такие флаги явно, и для удобочитаемости и для мобильности. Я могу вообразить некоторых людей, разрабатывающих a cut поскольку Windows не следовал бы полному стандарту. –  Willem Van Onsem 19.04.2015, 15:32
  • 3
    Это должно быть принято ответ: самый простой код, самое простое объяснение. ya закрепил его: youtube.com/watch?v=dpNTHl7y45Y –  neuronet 17.06.2016, 00:28
  • 4
    Этот ответ изменил мою жизнь –  matheeeny 28.04.2017, 16:00
awk -F '\t' '{ print $2 }' inputfile

Это извлекает второе разграниченное вкладкой поле каждой строки входа от inputfile.

12
27.01.2020, 19:28

более в общем, не требуя никаких невидимых символов: Использовать tr для преобразования разделителей в формат, который может быть указан более легко к , сокращает .

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

tr является простым, но мощным, символьным соответствием и заменяющим инструментом.

10
27.01.2020, 19:28

В качестве альтернативы можно обернуть cut функцией.

function getColumns ()
{
    local -r delimiter="${1:?}"
    local -r columns="${2:?}"

    if [[ "$delimiter" == '\t' || "$delimter" == "tab" ]]; then
        cut "--fields=${columns}"
        return
    fi

    cut "--delimiter=${delimiter}" "--fields=${columns}" 
}
0
17.10.2021, 15:30

Теги

Похожие вопросы