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

时间:2011-10-20 11:41:33

标签: bash

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

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

2 个答案:

答案 0 :(得分:2)

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

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

所以,你:

  1. 创建复杂功能
  2. export -f the funcion
  3. 找到执行bash,调用导出的函数
  4. 并且,无需创建文件!

答案 1 :(得分:1)

这是因为$RANDOM函数调用在运行find命令时被其结果替换,而不是在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将被评估为有文件的次数。

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