sed命令在文件中查找并替换并覆盖文件,如何初始化文件具有当前文件/脚本

时间:2018-06-26 15:11:21

标签: bash shell sed replace

我想增加当前的十进制变量, 所以我做了下面的代码

#! /bin/bash
k=1.3
file=/home/script.sh
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$file"
echo $k

正如您在这里看到的,我必须在第3行中指定文件,是否有一种解决方法只是告诉它在当前文件中进行编辑和替换。而不是我将其指向文件。谢谢。

1 个答案:

答案 0 :(得分:0)

认为,您问的是如何引用自己的脚本名称,该名称由$0持有,例如<​​/ p>

#! /bin/bash
k=1.3
next_k=$(echo "$k + 0.1" | bc -l)
sed -i "s/$k/$next_k/g" "$0"
echo $k

您可以在Positional Parameters here上阅读更多信息,特别是以下内容:

  

($ 0)扩展为shell或shell脚本的名称。这是在外壳初始化时设置的。如果使用命令文件调用Bash(请参见Shell脚本),则将$ 0设置为该文件的名称。如果Bash以-c选项启动(请参阅调用Bash),则将$ 0设置为要执行的字符串之后的第一个参数(如果存在)。否则,将其设置为用于调用Bash的文件名,如参数0所示。

例如

$ cat test.sh
 #! /bin/bash
 k=1.3
 next_k=$(echo "$k + 0.1" | bc -l)
 sed -i "s/$k/$next_k/g" $0
 echo $k
$ ./test.sh; ./test.sh ; ./test.sh
 1.3
 1.4
 1.5
$ cat test.sh
 #! /bin/bash
 k=1.6
 next_k=$(echo "$k + 0.1" | bc -l)
 sed -i "s/$k/$next_k/g" $0
 echo $k