YAML 파일에서 최상위 항목과 그 아래의 모든 노드를 제거하는 방법은 무엇입니까?

YAML 파일에서 최상위 항목과 그 아래의 모든 노드를 제거하는 방법은 무엇입니까?

내 파일에는 다음 항목이 포함되어 있습니다.

cat /tmp/test.yaml
---
10.8.8.26:
  /tmp/win5835113081224811756.jar:
    hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

  /tmp/win03745991442278706.jar:
    hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

10.9.9.26:
  /tmp/conf/extra/httpd-ssl.conf:
    hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2

  /tmp/conf/httpd.conf:
    hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2

등...

test.yaml에서 특정 IP(예: 10.8.8.26)와 해당 파일 세부정보를 제거하고 싶습니다.

다음 정규식은 파일에서 제거하려는 세부 정보를 얻는 데 도움이 되므로 check라는 변수에 저장합니다.

export check=`grep -Pzo '[^#](^10.8.8.26:)(.|\n)*^(?!( |\n))' /tmp/test.yaml`

echo $check
10.8.8.26: /tmp/win5835113081224811756.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb /tmp/win03745991442278706.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb

그런 다음 변수 검사를 사용하여 파일에서 가져온 항목을 제거하고 싶습니다.

다음 명령을 시도했지만 도움이 되지 않았습니다.

grep -v "$check" /tmp/test.yaml

그리고

sed "/${check}/d" /tmp/test.yaml sed: -e expression #1, char 1:
 unterminated address regex

내 요구 사항을 충족하는 방법을 제안해 주실 수 있나요?

답변1

얼마나 멀리 갈 것인가?

awk -v"DEL=10.8.8.26" '/^[0-9]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file

이해합니다?

노력하다

awk -v"DEL=10.9.9.26" '/^[^ ]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file

"IP 주소가 호스트 이름으로 변경된 경우."(귀하의 의견에서) 이것을 원래 질문에 포함시키는 것이 도움이 될 것입니다.

관련 정보