我对linux shell脚本不是很好,我需要的帮助很少。
我想通过脚本编辑文件(查找行和编辑)。
原始行是:
#JVM_OPTS =" $ JVM_OPTS -Djava.rmi.server.hostname =<主机名>"
我想取消注释并使用127.0.0.1
重播主机名JVM_OPTS =" $ JVM_OPTS -Djava.rmi.server.hostname = 127.0.0.1"
答案 0 :(得分:3)
以下是一种方法:
sed -i -e 's/# \(JVM_OPTS=.*=\).*/\1127.0.0.1"/' path/to/file
也就是说,将该行替换为组\(JVM_OPTS=.*=\)
中捕获的文本,从JVM_OPTS=
到另一个=
的所有内容都会签名,并将127.0.0.1"
追加到最后。
如果文件中可能还有其他行以# JVM_OPTS=
开头,
那么你可以使模式匹配更严格,例如:
sed -i -e 's/# \(JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=\).*/\1127.0.0.1"/' path/to/file
答案 1 :(得分:3)
您可以参考set命令,使用您正在使用的名称更改文件名,
sed -i 's@# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=< hostname >"@JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"@' filename
答案 2 :(得分:3)
很好的答案,但他们没有做任何事情,通过教导绅士如何以及为什么有效。
如果您使用的是普通文本编辑器ed,则在调用命令“ed filename”后将使用三个命令:
s / ^#//
S /&LT;主机名&GT; /127.0.0.1/
瓦特强>
因此,您可以使用管道将这些命令直接提交给ed,指定“ - ”作为其第一个参数,以便在读入和写出文件时报告字符计数不会打扰您:
(echo's / ^#//'; echo's // 127.0.0.1 /'; echo w)| ed - filename
你也不需要回复'q',因为ed会在输入用完或遇到“文件结束”时自动退出(你只需点击CTRL-D键就可以在键盘上模拟这个而不是实际输入q)。