我需要一个能够多次产生以下输出的脚本
@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
会产生相同的效果,但稍微不那么简洁。