用于生成增量重复输出的 Shell 脚本

用于生成增量重复输出的 Shell 脚本

我需要一个能够多次产生以下输出的脚本

@float Figure,fig:n
@cindex 
@image{n,9cm}.
@caption{}
@end float

但其中 n(两次)被替换为 1、2、3,直到一个很大的数字。

谢谢。

答案1

seq 1000 | sed 's/.*/@float Figure,fig:&\
@cindex \
@image{&,9cm}.\
@caption{}\
@end float\
/'

以传统的 Unix 方式(看看如何seq同时sed运行并配合任务)。

答案2

尝试:

$ for n in {1..10}; do printf '@float Figure,fig:%s
> @cindex
> @image{%s,9cm}.
> @caption{}
> @end float
> ' ${n} ${n}; done

或者,作为一行:

for n in {1..10}; do printf '@float Figure,fig:%s@cindex\n@image{%s,9cm}.\n@caption{}\n@end float\n' ${n} ${n}; done 

上面打印了 10 次,每组之间没有空行。将10花括号中的更改为不同的数字。\n在长语句末尾添加另一个printf空行。

答案3

您可以使用循环大括号扩展以及产生输出的各种方式中的任何一种。我会用一个这里的文档:

for n in {1..100}
do
    cat <<EOT
@float Figure,fig:$n
@cindex 
@image{$n,9cm}.
@caption{}
@end float
EOT
done

这将循环 1 到 100 之间的值,并打印出每个值的文本,并每次都替换n为适当的值。n

如果你没有 Bash,seq 1 100将具有与大括号扩展相同的效果;没有这个,一个普通的循环:

i=0; while [ $i -lt 100 ] ; do ... ; i=$((i + 1)) ; done

会产生相同的效果,但稍微不那么简洁。

相关内容