【发布时间】:2015-03-15 15:05:39
【问题描述】:
我正在尝试读取文件、替换变量或将其添加到底部(如果尚未指定)。
我得到了一些帮助才能走到这一步:
#!/bin/bash
function replaceappend() {
if ! sed "/$2/{s//$3/;h};"'${x;/./{x;q0};x;q1}' $1
then
echo "$3" >> $1
fi
}
replaceappend "/etc/ssh/sshd_config" "Port 22" "Port 123"
但是,在运行此脚本后,原始文件的内容似乎没有受到影响,并且保留在端口 22 上,没有附加任何内容。
在这个例子中,它在 sed 上使用一个指定的退出代码,使用 q 标志来查看它是否找到它,如果没有,则附加它。
谁能明白为什么这段代码可能不起作用?
【问题讨论】:
-
你的q的标题少了一个字。
-
您的意思是使用
sed -i? -
Can anyone see why this code may not work?- 是的,它非常复杂并且充满了神秘的语言结构。 sed 用于单行上的简单替换,其他任何内容只需使用 awk。在 1970 年代中期,当 awk 被发明时,您使用的大多数 sed 构造都已过时。如果您编辑您的问题以显示一些示例输入和预期输出,我们可以帮助您创建一个更简单、更清晰且可能更简洁的解决方案。