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

3

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

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

请避免使用正则表达式解析HTML/XML。 - P Shved
你能解释一下为什么吗? - user1005101
请查看此答案,了解原因的简要列表:https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454 - P Shved
谢谢,但我需要这个解决方案用于我的30个项目,并且这是最快的方式。这只是一个情况。 - user1005101
2个回答

2

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

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

所以,你需要:

  1. 创建一个复杂的函数
  2. 导出该函数
  3. 找到调用导出函数的bash执行程序

而且,无需创建文件!


1
这是因为当您运行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将会被评估与文件数量相同的次数。

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


可以了!谢谢!抱歉,我在bash方面还很新,$@是什么意思? - user1005101
这是脚本所有命令行参数的数组。在这种情况下,传递第一个参数就足够了,所以你也可以写成$1。 - Philippe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接