다음 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 시스템의 모든 쉘에서 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