【问题标题】:Shell Script Edit Files LineShell 脚本编辑文件行
【发布时间】:2016-07-30 21:32:34
【问题描述】:

我不太擅长 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"

【问题讨论】:

    标签: linux shell file edit


    【解决方案1】:

    你可以参考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】:

      很好的答案,但他们没有通过教绅士如何以及为什么工作来做任何事情。

      如果您使用的是普通文本编辑器 ed,则在调用命令“ed filename”后将使用三个命令:

      s/^# //
      s//127.0.0.1/
      w

      因此,您可以使用管道将这些命令直接提交给 ed,指定“-”作为其第一个参数,这样它就不会在读入和写出文件时报告字符数而打扰您:

      ( echo 's/^# //'; echo 's//127.0.0.1/'; echo w ) | ed - 文件名

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

      【讨论】:

      • 感谢您的精彩解释。我决定采用 L.feir 的解决方案。但我想你的回答会在以后对其他人和我有所帮助。
      【解决方案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
      

      【讨论】:

      • 这些命令会创建一个名为 path/to/filee 的备份。正确的语法是-i -e
      猜你喜欢
      • 2016-08-10
      • 2014-11-29
      • 2016-01-21
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多