Как разрешить завершению файлов для остальных _arguments?

Используйте awk и : в качестве разделителя полей. Затем вы можете сохранить каждое уникальное сообщение об ошибке (которое будет шестым полем) в массиве и распечатать только первое вхождение:

$ awk -F: '!a[$6]++' file 
Dec  9 07:24:02 94.15.218.140 syslog: ssk:548.049:is_dns_hijack:1451:isDnsHijack=0
Dec  9 07:24:10 90.192.172.112 syslog: ssk:363.218:cmsLck_releaseLockTraced:144:lock hold time=0ms, acquiring lock callerFuncName is_dns_hijack; releasing lock callerFuncName is_dns_hijack;
Dec  9 07:24:10 90.192.172.112 syslog: ssk:363.217:cmsLck_acquireLockWithTimeoutTraced:98:acquired lock. callerFuncName is_dns_hijack; timeout 12000 milliseconds

Приведенный выше сценарий сохранит каждую строку как запись в ассоциативном массиве a только в том случае, если для 6-го поля еще не сохранено значение (! a [$ 6] ). Поскольку действие по умолчанию в awk состоит в том, чтобы печатать, когда что-то оценивается как истина, в результате будут напечатаны только первые уникальные вхождения.

Если вы хотите сделать это только для строк, соответствующих dns , используйте:

awk -F: '!a[$6]++ && /dns/' file 

Что касается игнорирования первых 11 строк, вы можете сделать это с помощью:

grep dns file | tail -n +12
0
27.07.2018, 11:41
1 ответ
#compdef foo
local ret=1
_arguments \
  '1:first:(a b c)' \
  '*:files:_files' \
  && ret=0
return $ret

завершаетabили cдля меня, а затем тестирует как минимум два файла. Изменение обработчика первого аргумента

  '1: :($(print -l a b c))' \

у меня тоже работает. Если у вас есть пробелы в выводе того, что делает ваша программа, это будет проблемой для завершения первого аргумента, но не нарушит завершение последующих файлов для меня:

  '1: :($(< ~/tmp/opts))' \

, а затем:

 % print -l "a b" c d > ~/tmp/opts
 % rm ~/.zcompdump
 % exec zsh -l
 % foo
 a  b  c  d

он представляет aили b, а неa b:обычно вместо этого можно увидеть такие вещи, как ${(f)"$(...)"}, для разделения только на новые строки, cd $fpath[-1]обычно ZSH предоставляет скрипты завершения для изучения.

Но я не могу воспроизвести утверждение «не работает завершение файлов»; возможно с полным скриптом завершения и подходящим выходом из программы?

Обратите внимание на команды rm ~/.zcompdump ; exec zsh -l, которые удаляют кеш завершения и запускают новый экземпляр ZSH. Менее навязчивой альтернативой может быть конкретная выгрузка по конкретному имени команды:

function zbouncecompdef { unfunction _$1; autoload -U _$1; }
1
28.01.2020, 02:42

Теги

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