テキストの節を反映するbashスクリプトがあります。インデントしたいです。
例:
echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
次のように印刷されます。
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
しかし、私が望むのはこれです。
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
私はこれらの段落の多くを手動でラップすることを避けることを好みます。
使用されているさまざまな技術などを見ましたが、sed
シェルの組み込み機能にのみ依存するだけです(最大の簡単でなければなりません)。
修正する
このように表現すると、man
ページ(任意のコマンドについて)はこれらの段落のすべての形式をどのように見事に指定しますか?まさか手で切ったのではないだろうか?基本命令をロギングする際に、組み込み命令以外に他のものは使用しないようですが?
答え1
somecommand | fold | awk '{ print "\t" $0 }'
somecommand
たとえば、から出力をインポートしてecho
送信すると、fold
80文字に縮小されます(fold -w N
折りたたみN
文字の場合)。これにより、スクリプトはタブawk
にインデントされた各行を印刷します。
純粋に折りたたむことはbash
必然的により複雑なスクリプトにつながります。
答え2
fmt
(GNU Coreutilsから)どうですか?
{ echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
} | fmt
Something
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo
-w n
改行の長さを変更するオプションを追加できます。n