【问题标题】:sed command find and replace in file and overwrite file , how to initialize file has current file/scriptsed 命令在文件中查找和替换并覆盖文件,如何初始化文件有当前文件/脚本
【发布时间】:2018-12-05 08:54:13
【问题描述】:

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

#! /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 行中指定文件,是否有解决方法来告诉它在当前文件中编辑和替换。而不是我将它指向文件。谢谢。

【问题讨论】:

    标签: bash shell sed replace


    【解决方案1】:

    认为你在问如何引用自己的脚本名称,$0 持有,例如

    #! /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 脚本的名称。这是在 shell 初始化时设置的。如果使用命令文件调用 Bash(请参阅 Shell 脚本),则 $0 设置为该文件的名称。如果 Bash 使用 -c 选项启动(请参阅 Invoking 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
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2017-09-12
      • 2012-02-14
      • 2011-07-07
      • 2012-06-07
      • 2010-10-06
      相关资源
      最近更新 更多