如何用 find 和 sed 生成随机数?

发布于 2024-12-10 17:11:48 字数 168 浏览 0 评论 0原文

如何在这段代码中生成随机数? 我尝试使用 $RANDOM,但数字仍然相同。如何改进呢?

find . -type f  -exec sed -i 's/<field name=\"test/<field name=\"test$RANDOM/g' {} \;

how to generate random number in this code?
I try use $RANDOM, but the number is still the same. How to improve it?

find . -type f  -exec sed -i 's/<field name=\"test/<field name=\"test$RANDOM/g' {} \;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

極樂鬼 2024-12-17 17:11:48

您还可以避免使用这种“一行”方式创建脚本文件,例如:

function FUNCtst() { echo "tst:$1";echo "tst2:$1"; }; export -f FUNCtst; find -exec bash -c 'FUNCtst {}' \;

因此,您:

  1. 创建一个复杂的函数
  2. export -f 函数
  3. find 执行 bash,该函数调用导出的函数

,并且无需创建文件!

you can also avoid creating a script file with this "one line" way, ex.:

function FUNCtst() { echo "tst:$1";echo "tst2:$1"; }; export -f FUNCtst; find -exec bash -c 'FUNCtst {}' \;

so, you:

  1. create a complex function
  2. export -f the funcion
  3. find executing bash, that calls the exported funcion

and, no need to create a file!

爱的故事 2024-12-17 17:11:48

发生这种情况是因为当您运行 find 命令时,$RANDOM 函数调用被其结果替换,而不是当 find 运行 sed 时 命令。

您可以做的是将 sed -i ... 部分放入脚本中,然后将此脚本传递给 find

例如,如果 subst.sh 包含:

#!/bin/bash
r=$RANDOM
sed -i "s/<field name=\"test/<field name=\"test${r}/g" $@

那么

find . -type f -exec ./subst.sh {} \;

应该可以解决问题,因为 $RANDOM 将被评估与文件数量一样多的次数。

(请注意,随机数在一个特定文件中仍然相同,但对于不同文件来说将是不同的。)

That happens because the $RANDOM function invocation is substituted with its result when you run the find command, not when find runs the sed command.

What you can do is put the sed -i ... part in a script, and pass this script to find instead.

For instance, if subst.sh contains:

#!/bin/bash
r=$RANDOM
sed -i "s/<field name=\"test/<field name=\"test${r}/g" $@

Then

find . -type f -exec ./subst.sh {} \;

should do the trick, because $RANDOM is going to be evaluated as many times as there are files.

(Note that the random number will still be the same across one particular file, but it will be distinct for different files.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文