如何重复一个单词或一行

如何重复一个单词或一行

如何在多行上重复一个单词或一行,就像foo下面的命令

$ 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

您不需要任何外部实用程序来执行此操作,只需使用本机 shell 的内部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 }'

BSD 系统也有一个二进制文件jot,它只能重复提供给它的字符串。或者在Ubuntu系统下athena-jot打包。

jot -b 'howdy world' 3 

答案2

tcshzshrepeat

repeat 3 echo word

有了printf,你可以这样做:

printf 'word\n%.0s' {1..3}

相关内容