2016-03-15 75 views
0

我想编辑几个AIX主机的/ etc/filesystems。我想替换所有行:ssh和编辑远程/ etc/filesystems与sed

/usr/sap/interfaces: 
dev    = /my_mount/mnt 

usr/sap/interfaces: 
dev    = "/my_mount/mnt" 

到目前为止我试着:

sed 's/^dev/\/my_mount\/mnt/"\/my_mount\/mnt"/' 

但没有奏效。我试图用远程ssh来做到这一点,所以我使用如下命令:

ssh [email protected] 'sed \'s/^dev/\/my_mount\/mnt/"\/my_mount\/mnt"/' ' 

那么,什么是做这个正确的方式?

在此先感谢。

+1

'sed'/^dev/s @ \(/ my_mount/mnt \)@“\ 1”@'' –

回答

1

您想要做的第一件事是更改您在sed中使用的分隔符,因为您试图匹配包含大量斜线的内容。

你想要做的第二件事是改变传递给ssh的命令中使用的引用,这次是因为sed喜欢撇号。这使得事情更容易阅读。

这应该离开你的命令是这样的:

ssh [email protected] "sed '/^dev/s#\(/my_mount/mnt\)#\"\1\"#' /usr/sap/interfaces" 

如果产生你想要的输出,那么你可以改变它利用-i ARG实际编辑文件,:

ssh [email protected] "sed -i '/^dev/s#\(/my_mount/mnt\)#\"\1\"#' /usr/sap/interfaces" 

请注意,在这一点上,您很可能会遇到像sed: couldn't open temporary file /usr/sap/sedEYALyx: Permission denied这样的错误,因为您的普通用户帐户无法写入内联编辑所需的临时文件。如果发生这种情况,您需要将sudo添加到命令中。