Linux 使用sed替换模式下的第一个匹配项
我有一个包含用户帐户的文件:Linux 使用sed替换模式下的第一个匹配项,linux,sed,expression,gnu,Linux,Sed,Expression,Gnu,我有一个包含用户帐户的文件: [account] username = mike password = mike expdate = 2015-02-14 city = blah address = blah [account] username
[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值更改为:
因此,只有在第一次出现以下情况后,才应对其进行修改:
username = mike
问题是,expdate可以是用户名下任意数量的行
使用GNU sed可以解决这个问题吗?你可以试试这个
sed
awk '/^username/{u=$3}
{
if(u=="mike" && ($1~/expdate/))
$3="2016-02-14"
}1' your_file
sed '/mike/,/\[account\]/{s/\(expdate[^=]\+=\).*/\1 2016-02-14/}' yourfile
您可以尝试此
sed
sed '/mike/,/\[account\]/{s/\(expdate[^=]\+=\).*/\1 2016-02-14/}' yourfile
这似乎是一个
OScam
pay server;)手动更改OSCam服务器的配置文件不是一个好办法,需要重新启动才能读取它 此版本基于用户1939168版本
格式不会更改,其空格或制表符是否分隔也无所谓
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
的,所以应该可以正常工作。这似乎是一个OSCam
付费服务器;)手动更改OSCam服务器的配置文件不是一个好办法,需要重新启动才能读取它 此版本基于用户1939168版本
格式不会更改,其空格或制表符是否分隔也无所谓
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
,因此应该可以正常工作。如果expdate
和=
@Jotne之间有选项卡,这可能会失败,谢谢。更新了答案。谢谢。“expdate”和“=”之间总是有空格,所以我加了一个点。我还添加了$来标记用户名的结尾:sed'/username$/,/[account]/{s/(expdate.*=)./\1 2016-02-14/}'如果在expdate
和=
@Jotne之间有选项卡,这可能会失败,谢谢。更新了答案。谢谢。“expdate”和“=”之间总是有空格,所以我加了一个点。我还添加了一个$来标记用户名的结尾:sed'/username$/,/[account]/{s/(expdate.*=)./\1 2016-02-14/}'我没有在这台计算机上安装awk。您使用的是什么操作系统?据我所知,所有的dreambox
都有它,与VU+
一样,其他的我在alix pc引擎(amd geode lx800)上运行一个非常简单的busybox版本,我已经在它上面编译了GNU。我建议你使用一些更强大的linux,比如ubuntu。您可以添加munin
来绘制OSCam
服务器中的运行情况。这是一个小型服务器,busybox是使用buildroot针对uclibc构建的。Alix pc引擎是一个小型、低功耗的嵌入式平台,不适合像ubuntu这样的完整linux发行版。谢谢,我会查一下munin,看看是否可以编译:)我没有在这台机器上安装awk。你使用的是什么操作系统?据我所知,所有的dreambox
都有它,与VU+
一样,其他的我在alix pc引擎(amd geode lx800)上运行一个非常简单的busybox版本,我已经在它上面编译了GNU。我建议你使用一些更强大的linux,比如ubuntu。您可以添加munin
来绘制OSCam
服务器中的运行情况。这是一个小型服务器,busybox是使用buildroot针对uclibc构建的。Alix pc引擎是一个小型、低功耗的嵌入式平台,不适合像ubuntu这样的完整linux发行版。谢谢,我将查找munin,看看是否可以编译:)谢谢,但是我没有在这台机器上安装awk。谢谢,但是我没有在这台机器上安装awk。