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

标签 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

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

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

最佳答案

即使是 awk 也更容易理解,但是在 sed 中

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

使用 ,+2 可以在范围内添加 +2 行

关于linux - 需要在 linux 中使用 sed 编辑文件中特定部分的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726977/

相关文章:

unix - 按前缀分组行

linux - 使用 awk 或 sed 从多个文件中消除重复行

linux - 解析路由以获取网关/DNS

java - 如何在 JSch 中检测错误(如 "Directory not found"、 "TNS listener lost contact"等)?

linux - 让 linux 将内存更改持久保存到磁盘

shell - 使 Jupyter 笔记本中的 shell 命令的输出静音

linux - Traceroute : target doesn't acknowledge packet just from a specific host. 来自其他主机的 Traceroute 工作正常。 Ping 在所有主机上都能正常工作

Linux 哈希命令搜索

linux - Linux中删除多个同名目录

bash - 使用sed插入文件内容