gpt4 book ai didi

linux - 编辑一行,找不到就创建

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:01 24 4
gpt4 key购买 nike

基本上我得到了一个“数据库”,以及我脚本中的一个函数来安装应用程序。所以这里的这个函数搜索:

is-program-installed=

当“程序”安装完成时出现“1”:

is-program-installed= 1

但是如果找不到该行并且我希望该函数写入一个会发生什么?

function dbmarktrue () {

table=${1?Usage: dbmarktrue $editdbtable}

sed -e "/^is-$table-installed=/ s/.$/1/" -i database.txt
}

最佳答案

我会检查文件并执行替换;如果发生这种情况,请设置一个标志。最后,在处理完整个文件后,如果未设置此类标志,则打印它:

awk -v replace="is-program-installed=1" '
$0 == "is-program-installed=" {$0=replace; seen=1}1;
END {if (!seen) print replace}' a

测试

它不存在:

$ cat a
hello
$ awk -v replace="is-program-installed=1" '$0 == "is-program-installed=" {$0=replace; seen=1}1; END {if (!seen) print replace}' a
hello
is-program-installed=1

它出现了:

$ cat a
hello
is-program-installed=
$ awk -v replace="is-program-installed=1" '$0 == "is-program-installed=" {$0=replace; seen=1}1; END {if (!seen) print replace}' a
hello
is-program-installed=1

像往常一样,awk 要替换原始文件,您可以将输出重定向到一个临时文件,然后移动到原始文件:

awk '...' file > tmp_file && mv tmp_file file

通过使用 &&,我们可以确保 mv 命令不会在 awk 因错误退出时执行。

关于linux - 编辑一行,找不到就创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com