この形式で出力するコマンドがあります:
A
B
C
D
E
F
G
I
J
など 出力をこの形式にしたい
A B C D E F G I J
使用してみ./script | tr "\n" " "
ましたが、出力から削除するn
だけです。すべての出力を1行で取得するにはどうすればよいですか。(改行)
編集:質問中に誤ってgrepを入力しました。私はそれを削除しました。私の最初の質問はまだ残っています。
はgrep
余分です。
これはうまくいくはずです:
./script | tr '\n' ' '
al
引数を 1 行に 1 つずつリストするコマンドを使用して実行しました。
$ al A B C D E F G H I J
A
B
C
D
E
F
G
H
I
J
$ al A B C D E F G H I J | tr '\n' ' '
A B C D E F G H I J $
Jonathan Leffler が指摘しているように、grep
. 使用しているコマンド:
./script | grep tr "\n" " "
tr
コマンドを呼び出すことさえしません。およびという名前のファイルでパターンを検索する必要があります。それはあなたが報告した出力ではないので、使用しているコマンドを間違って入力したと思われます。"tr"
"\n"
" "
あなたはこれを行うことができます:
./script | tr '\n' ' '
ただし、(a) すべての入力を 1 行に結合し、(b) 行末に改行を追加しません。通常、これは、シェル プロンプトが出力行の最後に出力されることを意味します。
すべてを 1 行にまとめたい場合は、次のようにします。
./script | tr '\n' ' ' ; echo ''
または、出力を適切な幅に折り返す場合:
./script | fmt
このfmt
コマンドには、行の最大長などを制御するための多くのオプションがあります。詳細については、ドキュメント (man fmt
またはinfo fmt
) を参照してください。
私が間違っていなければecho
、引数が引用符で囲まれていない場合、コマンドは自動的に改行文字を削除します。
tmp=$(./script.sh)
echo $tmp
結果は
A B C D E F G H I J
一方
tmp=$(./script.sh)
echo "$tmp"
結果は
A
B
C
D
E
F
G
H
I
J
echo
必要に応じて、コマンドの出力を別の変数に再割り当てできます。
tmp=$(./script.sh)
tmp2=$(echo $tmp)
変数には$tmp2
改行が含まれません。