【问题标题】:change a word in a matching line更改匹配行中的单词
【发布时间】:2016-02-17 17:51:42
【问题描述】:

我尝试搜索和替换一个单词,但只在包含模式的行中。就我而言,它是一个 /etc/fstab 文件,我想将 ro 标志修改为 rw,但仅适用于某些特定共享。

这是我的 NFS 共享的样子:

servername1:/path/to/share1 /nfs/mount1 nfs ro,nosuid,soft,vers=3   0 0
servername2:/path/to/share1 /nfs/mount2 nfs ro,nosuid,soft,vers=3   0 0
servername1:/path/to/share2 /nfs/mount3 nfs ro,nosuid,soft,vers=3   0 0

我想将其更改为: servername1:/path/to/share1 /nfs/mount nfs rw,nosuid,soft,vers=3 0 0

但仅适用于特定的服务器和共享。我试过这个:

sed '/servername1.*share1 s/ro/rw' fstab

但它没有用。那么我应该使用哪个正则表达式来实现我的目标?

谢谢

【问题讨论】:

    标签: regex linux unix awk sed


    【解决方案1】:

    你可以使用这个sed

    sed '/^servername1.*share1/s/ro,/rw,/' fstab
    

    输出:

    servername1:/path/to/share1 /nfs/mount1 nfs rw,nosuid,soft,vers=3 0 0
    servername2:/path/to/share1 /nfs/mount2 nfs ro,nosuid,soft,vers=3 0 0
    servername1:/path/to/share2 /nfs/mount3 nfs ro,nosuid,soft,vers=3 0 0
    

    【讨论】:

    • 这将从 servername1 修改 share1 和 share2 对吗?我只想从 servername1 修改 share1 而不是 share2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多