Обобщенное решение с использованием grep с ароматом Perl:
$ a="gi_1 \t Dog;Pink;Blue;Beige;Yellow;Orange;Red;Green irish"
[s@SS data]$ echo $a | grep -P -o "((^gi_. \\\t )|(?<=[; ])(?:.(?!(([; ].+)){8}))+$)" | sed ':a;N;$!ba;s/\n/ /g'
gi_1 \t Pink;Blue;Beige;Yellow;Orange;Red;Green irish
Обратите внимание, что это работает с любым количеством слов.
Группа без захвата и отрицательный просмотр вперед исключают любые символы, которые не следуют за повторяющейся последовательностью [; ] с последующими любыми символами.
Положительный взгляд вперед в начале избавляет от опережения [; \t] символ
Часть sed избавляется от новой строки между ними.
-HUP
, которое вы читаете как три варианта, -H
, -U
и -P
, является примером того, что в синопсисе указано как -SIGNAL
, то есть имя сигнала с префиксом тире.
Сигнал HUP
— это сигнал «повесить -трубку», обычно посылаемый оболочке для его завершения.Этот сигнал также обычно используется, чтобы сообщить процессам-демонам (, например rsyslogd
), что они должны повторно -прочитать свои файлы конфигурации или перезапуститься и т. д.
Команда killall -HUP rsyslogd
отправляет сигнал HUP
всем процессам с именем rsyslogd
.
Вы также можете использоватьpkill
:
pkill -HUP rsyslogd
или, чтобы использовать сигнал номер вместо имени сигнала (проверьте номера с помощью kill -l
, но почти никогда нет причин использовать номера ),
pkill -1 rsyslogd