次のように列ヘッダーを生成するには:
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
試してください。dash
tcsh
カミールの方法。
答え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バージョンのseq
when-s ''
仕様は終了時に改行文字を生成しません。