如何在此实例中的sed命令中使用bash变量?

时间:2015-05-22 19:13:50

标签: bash sed

我想在文件的每一行的开头插入一个随机数(其中50个)。

for i in `seq 1 50`; do
  r=$RANDOM
  sed -e '{$i}s/^/$r,/' file1 > file2
done

如何让i变量在该sed命令中工作?

1 个答案:

答案 0 :(得分:3)

如果你使用双引号而不是单引号,它将扩展bash变量,但是你还必须转义任何bash特殊字符

你可以做到

for i in `seq 1 50`; do
  r=$RANDOM
  sed -e "${i}s/^/$r,/" file1 > file2
done
事实上,你甚至可以在没有像

这样的中间变量的情况下做到这一点
for ((i=1; i<51; i++)); do
    sed -e "${i}s/^/$RANDOM,/" file1 > file2
done

虽然要注意file2实际上只包含你最后编辑的内容,因为你每次都会覆盖它。

如果您希望在file中进行所有修改,可以使用-i标记。使用GNU的版本,你可以做到

for ((i=1; i<51; i++)); do
    sed -i -e "${i}s/^/$RANDOM,/" file1
done

然后file1将包含所有更改。

此外,您可以使用单个命令执行此操作而不为每个sed运行awk,例如

awk '{print int(rand() * 65536) ", " $0}' file1 > file2

将在0到65536之间给出一个随机int,可以根据需要随意修改该int。