Терминал открывается, но показывает ошибку и не работает должным образом

Существует отличный список "примеров" команд/инкантаций для sed, которые курировались в течение очень долгого времени в имени sed1line.txt (http://sed.sourceforge.net/sed1line.txt). В этом файле есть отличный пример, который будет полезен в данном случае:

# if a line begins with an equal sign, append it to the previous line
# and replace the "=" with a single space
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

В случае нашего вывода dnf/yum мы знаем, что обернутые строки начинаются с одного или нескольких пробелов, за которыми следует двоеточие (:), а затем еще один пробел. Используя эти знания, мы можем изменить наш пример sed, чтобы учесть это, и соединить строки:

sed -r -e :a -e '$!N;s/\n[[:space:]]+://;ta' -e 'P;D'

В этом случае нам нужно принять решение, поскольку + является частью "расширенного" набора регулярных выражений, нам нужно либо добавить -r, чтобы использовать символ +, либо вернуться к использованию * вместо него (который будет соответствовать нулю или более пробелов). Любой из вариантов будет работать, пример выше был приведен для педантичной корректности.

Результат следующий:

$ dnf search jenkins-ssh-credentials-plugin-javadoc | sed -r -e :a -e '$!N;s/\n[[:space:]]+://;ta' -e 'P;D'  | grep ssh
============= N/S Matched: jenkins-ssh-credentials-plugin-javadoc ==============
jenkins-ssh-credentials-plugin-javadoc.noarch : Javadoc for jenkins-ssh-credentials-plugin

Как видите, теперь grep работает, как и ожидалось. Кроме того, это позволяет более творчески подходить к форматированию вывода, чтобы облегчить сканирование списка пакетов:

$ dnf search ssh | sed -r -e :a -e '$!N;s/\n[[:space:]]+://;ta' -e 'P;D' | sort  | awk -F: '!($1~/^====/) {printf "%-40s : %s\n", $1, substr($0, index($0, $2))}'
ansible.noarch                           :  SSH-based configuration management, deployment, and task execution system
apache-sshd-javadoc.noarch               :  API documentation for apache-sshd
apache-sshd.noarch                       :  Apache SSHD
autossh.x86_64                           :  Utility to autorestart SSH tunnels
bareftp.x86_64                           :  File transfer client supporting the FTP, FTP over SSL/TLS (FTPS) and SSH
belier.noarch                            :  Generates scripts allowing you to chain many ssh connections
btrfs-sxbackup.noarch                    :  Incremental btrfs snapshot backups with push/pull support via SSH
...
trilead-ssh2.noarch                      :  SSH-2 protocol implementation in pure Java
WebShell.noarch                          :  SSL server for web-based SSH access from browsers and mobile devices
x11-ssh-askpass.x86_64                   :  A passphrase dialog for X and not only for OpenSSH

2
27.10.2017, 22:47
0 ответов

Теги

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