sed替换为eval

boo*_*oop 3 bash sed

我想做的事

replace: '1000'
with: (a random number) shuf -i 500-1500 -n 1
Run Code Online (Sandbox Code Playgroud)

shuf .. 应该在每次出现时都要满足 1000

我试过的

sed -i 's/1000/$(shuf -i 500-1500 -n 1)/g'
Run Code Online (Sandbox Code Playgroud)

但我只是将eval作为字符串

nu1*_*73R 5

之所以会发生这种情况,是因为单引号会逃避意义,$并且命令替换不会发生.

解决方案是使用双引号

sed -i "s/1000/$(shuf -i 500-1500 -n 1)/g"
Run Code Online (Sandbox Code Playgroud)

要使用不同的值替换每个匹配项shuf,可以使用basic遍历文件while并将字符串替换为

while read line
do
    echo "$line" | sed -i "s/1000/$(shuf -i 500-1500 -n 1)/g" >> output_temp
done    
mv output_temp original_file
Run Code Online (Sandbox Code Playgroud)
  • while循环从文件中读取每一行,并替换它们.
  • mv用temp文件替换原始文件.

  • 它将每1000个**相同的随机数**替换,而不是每次都是新的随机数. (2认同)