DNFおよびYUMコマンドから改行を削除する方法は?

DNFおよびYUMコマンドから改行を削除する方法は?

rpmベースのLinuxディストリビューション(RHEL / Red Hat、Fedora、CentOSなど)で使用されている場合、dnfユーティリティyumはユーザーが読みやすくするために自動的に行を置き換えます。これは、パイプによるデータ処理を非常に迷惑にするため、問題になります。

たとえば、

$ dnf search jenkins-ssh-credentials-plugin-javadoc
Last metadata expiration check: 6 days, 15:30:08 ago on Thu Sep  1 21:09:10 2016.
============= N/S Matched: jenkins-ssh-credentials-plugin-javadoc =============
jenkins-ssh-credentials-plugin-javadoc.noarch : Javadoc for jenkins-ssh-credentials-plugin
$ dnf search jenkins-ssh-credentials-plugin-javadoc | grep ssh
====== N/S Matched: jenkins-ssh-credentials-plugin-javadoc =======
jenkins-ssh-credentials-plugin-javadoc.noarch : Javadoc for
                                              : jenkins-ssh-credentials-plugin

DNFの出力が出てくると、通常はgrepユーザーに表示するのとまったく異なる方法でデータをラップすることにしました。

この動作に関していくつかの質問が提起されました(#584525#986740CLOSED NOTABUG)そして、「Yumはパイプラインに適していないか、または適切ではないテキストベースのインタラクティブなユーザーインターフェイス」なので、質問は常に終了しました。 Red Hat 開発者のソリューションは、「作業に別のツールを使用する」ことです。

repoquery特に、提供された方法(インストールなど)が正しく機能しない場合は、これを行う必要があるのは不合理です。存在するdnfこのデータの出力を解析するには、ユーティリティ内にさらにパッケージをインストールする必要があります。

理想的には、ユーザーはパイプラインでデータを使用できます。代わりに、データを使用可能にするために使用できる単純な1行コードがあればよいでしょう。

ベストアンサー1

sed名前で書かれた「例」コマンド/注文の素晴らしいリストがありますsed1line.txthttp://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改行文字は1つ以上の空白のインスタンスで始まり、その後にコロン(:)、そしてより多くの空白が続くことを知っています。この知識を使用して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

おすすめ記事