Bash编辑指定行的文件中的最后一个字符

时间:2013-11-10 20:18:13

标签: database bash file-io

我使用.txt文件作为数据库,如下所示:

is-program-installed= 0
is-program2-installed= 1
is-script3-runnig= 0
is-var5-declared= 1

但是如果我卸载程序2并且我想将其数据库值设置为“0”怎么办?

2 个答案:

答案 0 :(得分:2)

使用sed的一种方法:

sed -e '/is-program2-/ s/.$/0/' -i file.txt 

它的工作原理如下:

  • s/.$/0/将最后一个字符替换为0:点匹配任何字符,$匹配行的结尾 - 因此.$是该行的最后一个字符。
  • /is-program2-/是一个过滤器,因此仅对匹配的行执行替换。

我使用的过滤模式有点懒惰:它很短​​但不准确。更长,更严格的解决方案是:

sed -e '/^is-program2-installed= / s/.$/0/' -i file.txt 

答案 1 :(得分:2)

您可以在函数中包含sed命令(请参阅@janos'答案)以方便使用:

定义:

function markuninstalled () {
    PROGRAM=${1?Usage: markuninstalled PROGRAM [FILE]}
    FILE=${2:-file.txt}

    sed -e "/^is-$PROGRAM-/ s/.$/0/" -i.bak $FILE
}

然后,像这样使用它:

markuninstalled program2

它将修改默认文件file.txt并创建副本。