awk 여러 줄 변경

awk 여러 줄 변경

다음 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/'

설명하다:

  1. /^# network_config:/,/enabled: falseee/- 의 주소 지정 기능을 사용하여 포함 라인으로 시작하여 포함 라인으로 끝나는 sed섹션을 검색합니다 .# network_config:enabled: falseee
  2. 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

관련 정보