Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 更改匹配行中的单词_Regex_Linux_Unix_Awk_Sed - Fatal编程技术网

Regex 更改匹配行中的单词

Regex 更改匹配行中的单词,regex,linux,unix,awk,sed,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:/

我尝试搜索和替换一个单词,但只在包含模式的行中搜索和替换。在我的例子中,它是一个/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

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

sed '/servername1.*share1 s/ro/rw' fstab
但它不起作用。那么为了实现我的目标,我应该使用哪个正则表达式呢


谢谢

您可以使用此
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而不是share2修改share1