我对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”
我对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”
你可以参考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
下面是做这件事:
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
我没有尝试过这种解决方案,但它看起来像它可以对文件中的其他行也有效果,它以#JVM_OPTS开头...... 我想编辑的文件有很多行, ,请参阅cassandra-env.sh。对不起,我没有提到它。 但我想你的答案也会对其他人有所帮助:-) –
查看我更新的答案以处理该案例 – janos
精细的答案,但他们不教它如何以及为什么工作绅士的方式做任何事情。
如果您正在使用的平凡的文本编辑器,编辑,你会调用命令 “编辑文件名” 后,使用三个命令:
S/^#//
S/<主机名> /127.0。 0.1/
W¯¯
所以,你可以使用管道直接提交这些命令编辑,指定“ - ”作为第一个参数,这样它不报告字符数在阅读和写作打扰你出文件:
(echo's/^#//'; echo's // 127.0.0.1 /';回声w)| ed - filename
你不需要echo'q'也是因为ed在输入用完或遇到“文件结尾”时会自动退出(你可以通过点击CTRL模拟键盘上的内容-D键而不是实际键入q)。
感谢您的好解释。我决定采取L.feir的解决方案。但我想你的口气会在其他时间帮助别人和我。 –
谢谢,该解决方案对我来说工作得很好。 :-) –