単語や行を繰り返す方法

単語や行を繰り返す方法

foo以下のコマンドのように、複数行の単語または1行を繰り返す方法

$ foo 3 word 
word
word
word

または

$ foo 2 An example line
An example line
An example line

同じ効果がある

$ seq 3 | sed s/./word/
word
word
word

または

$ yes word | head -3
word
word
word

私はこれがこれを裏付けると思いましたがseq、私が知る限り、そうではありません。

ベストアンサー1

これを行うには外部ユーティリティは必要なく、デフォルトシェルの内部printf()機能を使用するだけです。たとえば、bashシェルでは次のことができます。

foo() {
    if [ "$1" -lt 2 ]; then
        printf '%s\n' 'insufficient arguments provided' >&2
    fi

    local iter
    for (( iter = 1; iter <= $1; iter++ )); do
        printf '%s\n' "$2"
    done
}

印刷したい単語を引用符で囲み、単語が散らばらないようにします。例えば

foo 3 bar
foo 3 'howdy world'

同じ外部ユーティリティを探している場合、または必要に応じて実行できるperl場合awk

printf '%s\n' 'howdy world' | perl -ne 'print $_ x 3' 

または

printf '%s\n' 'howdy world' | awk '{ for (i = 1; i <= 3; i++) print $0 }'

jotBSDシステムには、与えられた文字列だけを繰り返すことができるバイナリもあります。またはUbuntuシステムの下にパッケージしてくださいathena-jot

jot -b 'howdy world' 3 

おすすめ記事