如何在多行上重复一个单词或一行,就像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
tcsh
并zsh
有repeat
:
repeat 3 echo word
有了printf
,你可以这样做:
printf 'word\n%.0s' {1..3}