Variables 如何使用awk编辑文件中的行

Variables 如何使用awk编辑文件中的行,variables,awk,append,printf,Variables,Awk,Append,Printf,我有一个文件,其中有一堆独特的条目,每个条目都在自己的行中。我试图获取我创建的一些系统变量,并将它们插入到相应行的文件中。我一直把它插到下一行,或者随机回车 以下是该文件的一个示例: [default] access_key = bucket_location = US cloudfront_host = cloudfront.amazonaws.com 以下是我到目前为止已经掌握的脚本/命令: accesskey="ACCESSKEYWOULDENDUPHERE" awk -i inplac

我有一个文件,其中有一堆独特的条目,每个条目都在自己的行中。我试图获取我创建的一些系统变量,并将它们插入到相应行的文件中。我一直把它插到下一行,或者随机回车

以下是该文件的一个示例:

[default]
access_key =
bucket_location = US
cloudfront_host = cloudfront.amazonaws.com
以下是我到目前为止已经掌握的脚本/命令:

accesskey="ACCESSKEYWOULDENDUPHERE"
awk -i inplace -v x="$accesskey" '{print} /access_key =/ {print x}' /root/.s3cfg
事情就是这样

[default]
access_key =
ACCESSKEYWOULDENDUPHERE
bucket_location = US
cloudfront_host = cloudfront.amazonaws.com
正如你所看到的,我最后插入了一个新行

我的目标是让它看起来像这样:

[default]
access_key = ACCESSKEYWOULDENDUPHERE
bucket_location = US
cloudfront_host = cloudfront.amazonaws.com

我正试图找出如何使用printf,但到目前为止还没有解决。

要设置
access\u key
值,您需要做的就是将分隔符设置为
=
,并匹配
$1
中的字段以包含
access\u key
(记住后面的空白)并相应地更新
$2
值。原因是绝对字符串(不会像
access\u key
那样改变),直接比较比正则表达式匹配更容易

awk -v x="$accesskey" -vFS='=' -vOFS='=' '$1 == "access_key "{$2=" "x}1' file

一旦您发现它按您所需工作,请添加
-i inplace
标志。

您的
accesskey
值是多少?你是如何存储它的?将它添加到问题中,效果很好。我真的很惊讶这个答案这么难在谷歌上找到。我找到了一百万个例子,说明如何将线条追加到结尾或开始,如何将它们插入中间,但是没有“搜索和编辑BLAH等于哪里”。examples@CarComp:很高兴你发现这个答案很有用。它来自实践,如果你想使用如何使用Awk更多,请阅读Ed Morton的答案。在“用户”下搜索名称并查找