Shell脚本编辑文件行

时间:2016-07-30 21:32:34

标签: linux shell file edit

我对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"

3 个答案:

答案 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)。