2016-07-30 113 views
1

我对linux shell脚本不太好,我需要一点帮助。Shell脚本编辑文件行

我想通过脚本编辑文件(查找行和编辑)。

原线为:

#JVM_OPTS = “$ JVM_OPTS -Djava.rmi.server.hostname = <主机名>”

我想取消注释,并用127.0 replaye主机名。 0.1

JVM_OPTS = “$ JVM_OPTS -Djava.rmi.server.hostname = 127.0.0.1”

回答

3

你可以参考set命令,更改与文件名你在工作名称,

sed -i '[email protected]# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<hostname>"@JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"@' filename 
+0

谢谢,该解决方案对我来说工作得很好。 :-) –

3

下面是做这件事:

sed -ie 's/# \(JVM_OPTS=.*=\).*/\1127.0.0.1"/' path/to/file 

也就是说,更换同组\(JVM_OPTS=.*=\)内捕获文本行,所以一切从JVM_OPTS=直到另一个=标志,并追加127.0.0.1"到底。

如果有可能开始# JVM_OPTS=文件中的其他行, 那么你可以让模式匹配更加严格,例如:

sed -ie 's/# \(JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=\).*/\1127.0.0.1"/' path/to/file 
+0

我没有尝试过这种解决方案,但它看起来像它可以对文件中的其他行也有效果,它以#JVM_OPTS开头...... 我想编辑的文件有很多行, ,请参阅cassandra-env.sh。对不起,我没有提到它。 但我想你的答案也会对其他人有所帮助:-) –

+1

查看我更新的答案以处理该案例 – janos

3

精细的答案,但他们不教它如何以及为什么工作绅士的方式做任何事情。

如果您正在使用的平凡的文本编辑器,编辑,你会调用命令 “编辑文件名” 后,使用三个命令:

S/^#//
S/<主机名> /127.0。 0.1/
W¯¯

所以,你可以使用管道直接提交这些命令编辑,指定“ - ”作为第一个参数,这样它不报告字符数在阅读和写作打扰你出文件:

(echo's/^#//'; echo's // 127.0.0.1 /';回声w)| ed - filename

你不需要echo'q'也是因为ed在输入用完或遇到“文件结尾”时会自动退出(你可以通过点击CTRL模拟键盘上的内容-D键而不是实际键入q)。

+0

感谢您的好解释。我决定采取L.feir的解决方案。但我想你的口气会在其他时间帮助别人和我。 –