gpt4 book ai didi

linux - 注释和取消注释以空格开头的特定行

转载 作者:行者123 更新时间:2023-12-04 18:59:38 24 4
gpt4 key购买 nike

我刚开始使用 Linux,我需要注释/取消注释 .yml 文件的某些行。我已经搜索了文档,并在此处通过不同的帖子进行了搜索,例如:comment a line with sed
我需要从这里注释第 1 行和第 3 行:

output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
并从此处取消注释第 1 行和第 3 行:
#output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
我使用了这些命令:
sudo sed -i '/output.elasticsearch/s/^/#/g' /etc/filebeat/filebeat.yml
sudo sed -i '/["localhost:9200"]/s/^/#/g' /etc/filebeat/filebeat.yml
sudo sed -i '/output.logstash/s/^#//g' /etc/filebeat/filebeat.yml
sudo sed -i '/["localhost:5044"]/s/^ #//g' /etc/filebeat/filebeat.yml
但是,虽然这适用于每个 block 的第 1 行,但它不适用于第 3 行,其中 # 符号前有空格,我不知道如何更改

最佳答案

这可以通过在示例“filebeat.yml”文件上执行三个 sed 命令来实现

 sed -Ei '/^output.elasticsearch:$/,/^.*hosts: \["localhost:9200"\]$/{s/(^.*$)/#\1/}' filebeat.yml
第一个命令从以“output.elasticsearch”开头和结尾的行搜索到包含“hosts: ["localhost:9200"]”的行。对于该子集搜索,它会搜索完整的行 (^.*$) 和然后用 # (#\1) 前缀替换此行
 sed -Ei '/(^.*#hosts: \["localhost:5044"\]$)/{s/(^.*#)(.*$)/  \2/g}' filebeat.yml

第二个命令搜索 log stash hosts 行并将找到的行分成两部分,第一部分是行的开头到 # ,然后第二部分是该行的其余部分。然后,我们将这一行替换为第二部分,创建一个不带 # 的行,但根据 yaml 语法的要求添加了 2 个空格。
sed -Ei '/(^#output.logstash:$)/{s/(^.*#)(.*$)/\2/g}' filebeat.yml
第三个命令遵循与第二个相同的逻辑,但这次不保留任何空格

关于linux - 注释和取消注释以空格开头的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64985830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com