我有一个包含用户帐户的文件:
[account]
username = mike
password = mike
expdate = 2015-02-14
city = blah
address = blah
[account]
username = george
password = george
city = blah
address = blah
expdate = 2015-02-14
[account]
username = hans
password = hans
city = blah
expdate = 2015-02-14
address = blah
因此,每个用户帐户都以[account]开头,并且其下方有一些值。
我想使用GNU sed来改变用户" mike"的expdate值。到:
expdate = 2016-02-14
所以它应该只在第一次出现后改变它:
username = mike
问题是,expdate可以是用户名下面的任意数量的行。
这可以用GNU sed解决吗?
答案 0 :(得分:3)
awk '/^username/{u=$3}
{
if(u=="mike" && ($1~/expdate/))
$3="2016-02-14"
}1' your_file
答案 1 :(得分:2)
这似乎是OScam
付费服务器;)
手动更改OSCam服务器的配置文件并不是一件好事,需要重新启动才能读取它。
这是基于user1939168版本的版本
格式化不会更改,并且它的空格或制表符是否分开无关紧要。
awk '/^username/{f=$3} f=="mike" && $1=="expdate" {sub(/2015/,"2016")}1'
[account]
username = mike
password = mike
expdate = 2016-02-14
city = blah
address = blah
这假设user
名称出现在expdate
之前且它OSCam
出现,所以应该可以正常工作。
答案 2 :(得分:1)
您可以尝试此sed
,
sed '/mike/,/\[account\]/{s/\(expdate[^=]\+=\).*/\1 2016-02-14/}' yourfile