需要使用linux中的sed编辑文件中特定部分的一行

时间:2015-06-09 08:38:59

标签: linux shell sed

我需要编辑以下文件中[token]部分的提供者行:

$ cat test.txt
[test]

    #provider = keystone.token.providers.uuid.Provider
    #driver = keystone.token.persistence.backends.sql.Token
    #caching = true
    #cache_time = <None>

[token]

    #provider = keystone.token.providers.uuid.Provider
    #driver = keystone.token.persistence.backends.sql.Token
    #caching = true
    #cache_time = <None>

[trust]

    #provider = keystone.token.providers.uuid.Provider
    #driver = keystone.token.persistence.backends.sql.Token
    #caching = true
    #cache_time = <None>

我试过了:

sed -e '/^\[token\]/s/^\#provider.*/provider = keystone.token.providers.uuid.Provider/' test.txt

但是没有对文件进行任何更改。

如何更改脚本以编辑正确的部分?

2 个答案:

答案 0 :(得分:1)

即使awk对于理解也更好更清楚,不过在sed中

sed -i.bak '/\[token\]/,+2 s/#//' test.txt

用,+ 2你在范围内添加+2行

答案 1 :(得分:0)

以下是使用awk的方法:

RS

取消设置记录分隔符[token]意味着awk一次读取一个块。 f匹配时,会设置标记f。设置f并且替换成功后,1未设置,因此不会进行其他替换。最后的ORS是常用的简写,表示每行都打印出来。 {{1}}是输出记录分隔符,它设置为两个换行符,因此不会丢失每个块之间的空格。