1

この形式で出力するコマンドがあります:

A
B
C
D
E
F
G
I
J

など 出力をこの形式にしたい

A B C D E F G I J

使用してみ./script | tr "\n" " "ましたが、出力から削除するnだけです。すべての出力を1行で取得するにはどうすればよいですか。(改行)

編集:質問中に誤ってgrepを入力しました。私はそれを削除しました。私の最初の質問はまだ残っています。

4

4 に答える 4

4

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 $
于 2012-07-05T05:27:18.243 に答える
1

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) を参照してください。

于 2012-07-05T05:39:36.987 に答える
0

私が間違っていなければ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改行が含まれません。

于 2012-07-06T09:27:50.670 に答える