我想做的事
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作为字符串
之所以会发生这种情况,是因为单引号会逃避意义,$并且命令替换不会发生.
解决方案是使用双引号
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文件替换原始文件.