НЕОБХОДИМЫЕ символы табуляции не совпадают в сценариях оболочки, но совпадают в командной строке - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь выполнить простой анализ вывода команды xinput в сценарии оболочки.То, что я пытаюсь сделать, прекрасно работает в командной строке, но не работает в сценарии.

Вот моя командная строка:

xinput list | awk '/Name of my Device   id[0-9]*    \[slave pointer/'

Вывод предыдущей команды:

⎜   ↳ Name of my Device      id=12   [slave  pointer  (2)]

В ответ на приглашение я вкладываю вкладки, нажимая CTRL-V, TAB .Когда в сценарии я ввожу строку, которая гласит:

xinput list | awk '/Name of my Device   id[0-9]*/'

, которая возвращает три строки данных.Как только я добавлю еще одну вкладку, вот так:

xinput list | awk '/Name of my Device   id[0-9]*    /'

Я больше не получаю вывод.Я пробовал как с CTRL-V, TAB , так и просто с TAB .Я также пробовал вручную вводить всю строку сценария с нуля на случай, если там где-то есть непечатный текст.Почему awk может работать с первой вкладкой, а не со второй?Кстати, я пробовал это с dash, bash и zsh.Поведение идентично.

Большое спасибо.

PS Я забыл упомянуть, что мой редактор vim.

PPS

xinput list | awk '/Name of my Device   id[0-9]*    \[slave pointer/' |
    sed 'y/ \t/_$/'

вывод:

⎜___↳_Name_of_my_Device$id=12$[slave__pointer__(2)]

1 Ответ

0 голосов
/ 29 мая 2018

Оказывается, дополнительная вкладка была немного красной селедки.На самом деле это был отсутствующий = в шаблоне, который вызывал проблему:

xinput list | awk '/Name of my Device id=[0-9]* /'

- исправленная версия.

Без <tab> и без = это работаетпоскольку id[0-9]* соответствует id, за которым следует ноль или более цифр, поэтому наличие = не уничтожает совпадение.Однако после добавления <tab> на пути встанет =.

Выполнение

echo ' ↳ Name of my Device  id=12   [slave pointer (2)]' | awk '{sub(/Name of my Device id[0-9]*/, "XXX"); print}'

покажет, что совпадало, когда = и <tab> пропали без вести.

...