[英]To replace a immediate text after pattern match in Linux shell using sed
[英]Replace first match beneath a pattern using sed
我有一個包含用戶帳戶的文件:
[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 = 2016-02-14
因此,僅應在以下情況的首次出現后對其進行更改:
username = mike
問題是,expdate可以是用戶名下方的任意行。
可以用GNU sed解決嗎?
awk '/^username/{u=$3}
{
if(u=="mike" && ($1~/expdate/))
$3="2016-02-14"
}1' your_file
這似乎是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
確實在user
名之前,因此應該可以正常工作。
您可以嘗試使用此sed
,
sed '/mike/,/\[account\]/{s/\(expdate[^=]\+=\).*/\1 2016-02-14/}' yourfile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.