次の 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
正確な初期テキストとブロックの間に少なくとも1つの空白行を信頼できる場合:
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システムのすべてのシェルで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