非常に長い単語の行を最大長の別の行に分割する


18

スペースで区切られた単一の長い行にパッケージのリストを出力するスクリプトがあります。この行に含まれる情報は、後でユーザーに提示されるテキストファイルに挿入されます。

長い行を定義済みの最大長(たとえば80文字)で複数の行に分割しますが、分割はスペースでのみ行う必要があります(したがって、正確に80文字の後にスペースがなく、次の要素が長く)。

単一のエントリが80文字を超える場合はおそらく発生しません。このエントリが途中で分割されたり、単一の長い行になるかどうかは気にしません。

基本的に、自動ラッピングが選択されている場合、ほとんどのテキストエディターが行うことと同じですが、シェルスクリプトから実行したいです。

入力例:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg

望ましい出力例:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils
bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27
mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules
libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt
locales liblwres80 libkrb5support0 python openssh-client multiarch-support
libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh
libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales
python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc
libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg

回答:


30

あなたがしたいことはfold

fold -s -w80 file
  • -sfoldスペースでのみブレークするように指示します
  • -w80:幅を宣言しました
  • fold:また、stdinから読み取ります: echo "..." | fold -s -w80

1
パーフェクト、どうもありがとう。単純なコマンドが必要だと確信していましたが、フォールドのことは聞いたことがありません。
2014年

ありがとうございました。どういうわけか、foldを使用すると出力をファイルに保存できません。
user1323995
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.