我想在文件中搜索特定字符串,然后在该字符串的开头添加注释。但我需要一个避免正则表达式、全局变化和所有其他花哨东西的答案。
我写了这一行:
sed -i.bak '/PermitRootLogin no/# PermitRootLogin no/' ./sshd_config
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
sed:-e表达式#1,字符21:注释不接受任何地址
我认为问题是我需要转义 # 字符,但我没有找到任何有关如何执行此操作的资源,甚至没有提及它。我尝试过将 ^ 或 \ 或 \^ 放在 # 前面的各种组合,但我没有得到正确的结果。
请注意,我故意重复要替换的文本。我想要这个问题的最简单的解决方案:如何以最明显的方式用“# XYZ”替换“XYX”。
正如 @mlt 的评论中所指出的,您可以尝试在 sed 命令的开头添加 s 。直接来自他的评论:
s/PermitRootLogin....
Run Code Online (Sandbox Code Playgroud)
我看到你说你是故意重复测试来替换的。如果您的意思是希望它是相同的,也许可以考虑对匹配的文本进行分组。我理解您的意思可能是您只想手写。无论如何,以下是如何匹配分组文本并添加注释字符:
s/(PermitRootLogin)/# \1/
Run Code Online (Sandbox Code Playgroud)
括号表示匹配的文本应被视为一个组,\1 表示您要将匹配的组放在那里。
我希望这可以帮到你。快乐编码!如果您有任何疑问,请发表评论。