seqが完了したときに改行文字の印刷を防ぐ方法は?

seqが完了したときに改行文字の印刷を防ぐ方法は?

次のように列ヘッダーを生成するには:

1234567890123456789

私はseqとechoを使用しようとしています。

seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9

ただし、seq は各実行後に改行文字を出力します。これをどのように避けることができますか?

答え1

単に印刷をしたいと仮定すると、1234567890123456789次のようになります。

$ printf "%s" $(seq 1 9) $(seq 0 9)
1234567890123456789$

しかし、末尾の改行はまったくないので、次のことを好むかもしれません。

$ printf "%s" $(seq 1 9) $(seq 0 9) $'\n'
1234567890123456789
$

そうでない場合は、より簡単なオプションがあります。必要使用seq:

$ perl -le 'print 1..9,0,1..9'
1234567890123456789
$ printf "%s" {1..9} {0..9} $'\n'
1234567890123456789

移植性について言及したので、そのperl方法を使用することをお勧めします。または、移植性のないシステムで実行できますが、perlシェルでbashなどを含む同じコマンドを実行する必要がある場合は、sh試してください。dashtcshカミールの方法

答え2

を使用して、すべてのストリームから改行を削除できますtr -d '\n'。あなたの場合

(seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9) | tr -d '\n'

他の答えは元のアプローチを修正することに焦点を当てることができますが、このアプローチは前の内容に関係なく改行文字のみを削除する必要があります|

答え3

私はあなたが特定の文字列を望まないと可変長に数字を増やす文字列が欲しいと仮定します。これを行うには、複数の呼び出しで幅を構築するよりも数字を変更して幅を変更できることが便利ですseq

Bashでは、次のものを使用できます(19個の長いシーケンスについて)。

for ((i=1; i <= 19; i++)); do printf "%d" "$(( i % 10 ))"; done; echo

これは標準シェル(少なくともダッシュとビジーボックス)で機能します。

i=1; while [ "$i" -le 19 ]; do printf "%d" "$(( i % 10 ))"; i=$((i+1)); done; echo

答え4

使用するときtr末尾の改行文字を削除するには、以下を削除することを認識することをお勧めします。みんな-dオプションで指定された文字の発生回数です。したがって、より薄くすることができます。

(seq 1 9; echo 0; seq 1 9) | tr -d '\n'

-echoもう必要ありません-n

完全性のために、BSDバージョンのseqwhen-s ''仕様は終了時に改行文字を生成しません。

関連情報