更改匹配行中的单词

时间:2016-02-17 17:51:43

标签: regex linux unix awk sed

我尝试搜索并替换一个单词,但仅限于包含模式的行。对于我的情况,它是一个/ 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

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

由于

1 个答案:

答案 0 :(得分: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