【问题标题】:Shell script: changing text file without knowing the original valueShell脚本:在不知道原始值的情况下更改文本文件
【发布时间】:2014-05-20 16:53:36
【问题描述】:

情况如下:我有一个 VPS 主机,它在安装时生成随机 SSH 端口,我有一个 configure.sh 文件,其中包含例如用于更改 SSH 端口的这一行:

sed -i 's/Port 22/Port 1337/' /etc/ssh/sshd_config

这很好用,但是我需要在 sed 命令中设置当前的 SSH 端口,显然我不知道它是什么时候随机生成的。

问候, 秋丰

【问题讨论】:

  • 请输入示例和扩展输出。
  • 使用左上角的{}编辑工具格式化代码和数据,使其可读。任何澄清问题描述的内容都应该是问题的一部分,而不是评论。祝你好运。

标签: shell sed debian


【解决方案1】:

这是一种方法:

sed -i 's/Port [0-9]*/Port 1337/' /etc/ssh/sshd_config

它将任何Port xxx(其中xxx 是任意数字)更改为Port 1337

【讨论】:

  • 这也将接受端口后的零位;我不确定这是否重要,但使用[0-9][0-9]*[0-9]\{1,\} 可能更安全(第一个选项实际上短一个字符)。
  • @JonathanLeffler sed 's/Port [^ ]*/Port 1337/'
  • 感谢您的回答,是否可以更改 sed 命令,使其甚至接受 5 位数的端口?例如。它刚刚生成了端口 26832
  • @Akitoyo 我的两个帖子都支持从165535 的任何端口。它只是将第一组数字替换为选择的数字。
  • 我(当然是次要的)担心是 * 允许零个或多个先前的模式([0-9][^ ]),所以如果有评论“端口线需要被编辑”,它也会被改变。总的来说,这是不重要的琐事。在扩展的 RE 表示法中(在支持它的系统上为 sed -rsed -E),您可以将 * 替换为 +;在sed 中写+ 的经典方式是\{1,\}(一个或多个)。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2021-07-28
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2019-12-02
  • 2017-11-26
相关资源
最近更新 更多