我有以下 datadog 文件
########################################
## System Probe Network Configuration ##
########################################
# network_config:
## @param enabled - boolean - optional - default: false
## Set to true to enable the Network Module of the System Probe
#
# enabled: falseee
##########################################
## Security Agent Runtime Configuration ##
## ##
## Settings to sent logs to Datadog are ##
## fetched from section `logs_config` ##
##########################################
# runtime_security_config:
## @param enabled - boolean - optional - default: false
## @env DD_RUNTIME_SECURITY_CONFIG_ENABLED - boolean - optional -
default: false
## Set to true to enable Cloud Workload Security (CWS).
#
# enabled: falseee
我主要想把以下部分转变成..
########################################
## System Probe Network Configuration ##
########################################
# network_config:
## @param enabled - boolean - optional - default: false
## Set to true to enable the Network Module of the System Probe
#
# enabled: falseee
进入这个
########################################
## System Probe Network Configuration ##
########################################
# network_config:
## @param enabled - boolean - optional - default: false
## Set to true to enable the Network Module of the System Probe
#
# enabled: TRUE
由于文件中有多行启用:错误,我正在使用多行 awk 搜索来进行搜索,但我陷入困境,因为我似乎无法实际对整个文件进行更改...
我创建了一个搜索模式
alias start="# network_config:"
alias end="# enabled: falseee"
然后我尝试使用 awk 剪掉我想要的部分来执行以下操作...
main=$(awk "/$start/, /$end/" system.yaml)
然后我真正想切换的部分......
sub_value=$(awk "/$start/, /$end/" system.yaml | awk '{sub(/enabled: falseee/,"enabled: TRUE"); print}')
所以现在我尝试执行以下操作来在整个文件上切换此功能..但它似乎不起作用....
echo $file | awk -v srch="$main" -v repl="$sub_value" '{ sub(srch,repl,$0); print $0 }'
甚至
echo "$(awk 'awk "{sub(/$(awk "/$start/, /$end/" system.yaml)/, $sub_value); print}"' system.yaml)" > newFile
我想使用 awk 执行此操作的原因是因为我们在工作中使用 tanium,并且我不确定如何为我们所有的服务器配置此文件。所以我只想通过 tanium 运行脚本来更改每个服务器的文件块...我想我只是迷失在 awk 的酱汁中..任何人都可以给我一个线索,告诉我我错过了什么并且没有看到什么?
答案1
如果珀尔被允许:
perl -00pe 's/(# network_config.*?enabled: )falseee/$1true/s' file
输出
########################################
## System Probe Network Configuration ##
########################################
# network_config:
## @param enabled - boolean - optional - default: false
## Set to true to enable the Network Module of the System Probe
#
# enabled: true
如果你想编辑到位,添加-i
开关:
perl -i -00pe .....
答案2
如果您可以依赖确切的初始文本,并且块之间至少有一个空行:
awk '/# network_config:/,NF==0 { sub ("falseee", "TRUE") } { print }'
sub()
除了所需的行之外,它将默默地不执行任何操作。
答案3
和sed
:
sed '/^# network_config:/,/enabled: falseee/s/enabled: falseee/enabled: TRUE/'
解释:
/^# network_config:/,/enabled: falseee/
- 将使用 中的寻址功能sed
,并将搜索以包含 的行开头# network_config:
并以包含 的行结尾的部分enabled: falseee
。s/enabled: falseee/enabled: TRUE/
- 该部分仅在寻址指定的部分内工作,并更改enabled: falseee
为enabled: TRUE
.
答案4
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk '/# network_config:/{f=1} f && /# enabled/{sub(/falseee/,"TRUE"); f=0} 1' file
########################################
## System Probe Network Configuration ##
########################################
# network_config:
## @param enabled - boolean - optional - default: false
## Set to true to enable the Network Module of the System Probe
#
# enabled: TRUE
##########################################
## Security Agent Runtime Configuration ##
## ##
## Settings to sent logs to Datadog are ##
## fetched from section `logs_config` ##
##########################################
# runtime_security_config:
## @param enabled - boolean - optional - default: false
## @env DD_RUNTIME_SECURITY_CONFIG_ENABLED - boolean - optional -
default: false
## Set to true to enable Cloud Workload Security (CWS).
#
# enabled: falseee