web-dev-qa-db-ja.com

文字列をn回繰り返すLinuxコマンド

入力文字列のn倍の文字列を出力するための組み込みのLinuxコマンドはありますか。

67
GetFree
adrian@Fourier:~$ printf 'HelloWorld\n%.0s' {1..5}
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$
70
Adrian Petrescu

これはかなり移植性のある昔ながらの方法です。

yes "HelloWorld" | head -n 10

これはブレース展開を使ったAdrian Petrescuの答えのより慣習的なバージョンです:

for i in {1..5}
do
    echo "HelloWorld"
done

これは以下と同等です。

for i in 1 2 3 4 5

これはpikeの答えのもう少し簡潔で動的なバージョンです。

printf -v spaces '%*s' 10 ''; printf '%s\n' ${spaces// /ten}
67

既にいくつかの良い方法があります。古き良きseqを忘れることはできません。

[john @ awesome] `seq 5`の中の$ i。こんにちは[こんにちは]をエコーし​​ますか;こんにちは[こんにちは]こんにちは[こんにちは]こんにちは[こんにちは]こんにちは[こんにちは]こんにちは
13
John T

これはパラメータ化することができ、一時変数FWIWを必要としません。

printf "%${N}s" | sed 's/ /blah/g'

$Nがbash配列のサイズの場合

echo ${ARR[@]/*/blah}
11
twifkak

あなたはトリックを使うことができます。空の変数をエコーし​​ても何も表示されません。だからあなたは書くことができます:

echo Word$wojek{1..100}

$wojek1 $wojek2 ... $wojek100が存在しない変数であれば、Wordは何もせずに100回繰り返されます。

9
Wojciech Waga

より一般的であなたにとって有用な別の方法かもしれません。

adrian@Fourier:~$ n=5
adrian@Fourier:~$ for (( c=1; c<=n; c++)) ; do echo "HelloWorld" ; done
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$ 

Bashシェルは、ほとんどの人が考えるよりも強力です:)

9
Adrian Petrescu

n回繰り返し、n-1の間に{}コンマを入れるだけです。

$ echo 'helloworld'{,,}
helloworld helloworld helloworld

最初のエコーの後に「helloworld」を2回繰り返します。

7
kev
awk 'BEGIN {while (c++<4) printf "Hello"}'

結果

ハローハローハローハロー
5
Steven Penny

@pikeが何を示唆していたかに基づいて

文字列echoのすべての文字に対して

echo ${target//?/$replace}

=文字で下線が引かれている見出しの例

export heading='ABCDEF'; 
export replace='='; 
echo -e "${heading}\n${heading//?/$replace}"

出力します

ABCDEF
======

これはLinuxとOS Xの間の移植のようです。

nジョイ!

3
nickl-

私はyesソリューションで壊れたパイプの警告を経験したので、別の良い方法があります:

$ seq 4 | sed "c foo"
foo
foo
foo
foo
3
n.caillou

BSDを使っているのなら、seqを使うことができます。

$ seq -f "Hello, world" 5
Hello, world
Hello, world
Hello, world
Hello, world
Hello, world
3
Qix

正確にはLinuxに組み込まれていませんが、Pythonがインストールされている場合は..

python
>>>var = "string"
>>>var*n

コメンターが示唆するように、あるいは一行で:

python -c 'print "This is a test.\n" * 10'
2
eqzx

Perlのx演算子のように、繰り返しの間に自動的に改行が入らないようなものが欲しいとします。

x() {
  # usage: x string num
  for i in $(seq 1 $2); do printf "%s" "$1"; done
  # print a newline only if the string does not end in a newline
  [[ "$1" == "${1%$'\n'}" ]] && echo ""
}

x Hi 10  # ==> HiHiHiHiHiHiHiHiHiHi

x $'Hello World!\n' 3

{1..$n}をbashで書くことはできないので、明示的にforループを使用しました。ブレース展開は変数置換の前に行われます。

2
glenn jackman
line="==========================="
line=${line:0:10}
${line//"="/"ten "}

アウトプット

ten ten ten ten ten ten ten ten ten ten
2
commonpike

ここに魔法はない:

seq 5 | awk '{print "Hello World"}'

1
brablc

これを試してください。

echo $(for i in $(seq 1 100); do printf "-"; done)

(百ダッシュ)を作成します。


1
Alle Aldine