sed/awk를 사용하여 파일에서 필요한 줄을 가져오는 bash

sed/awk를 사용하여 파일에서 필요한 줄을 가져오는 bash

파일의 내용은 다음과 같습니다.

Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text_1
    text_2:
    - text
    - file3:\\
Text3:
    etc

출력: 주어진 Textn에 대한 "file:\" 항목을 인쇄합니다. 이를 달성하기 위해 Linux에서 sed/awk 명령을 사용하는 방법을 알아 두십시오.

예: test.txt 파일의 내용은 다음과 같습니다.

$ cat test.txt 
Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text1
    text_2:
    - text
    - file3:\\
Text3:
    etc

제안된 대로 아래 grep 명령을 사용해 보십시오. 그러면 test.txt 파일의 모든 "file:\" 항목이 인쇄됩니다. "Text1:" 일치의 경우 출력으로 file1:\ 및 file2:\만 필요하고 "Text2:"의 경우 file3:\만 일치합니다.

답변1

yq새로 업데이트된 YAML 파일에 사용하려면 다음 file과 같은 값을 선택할 수 있습니다.

yq '.Text1.text_2[] | select(. == "file*")' file.yaml

산출

file1:\\
file2:\\

다른 값을 선택하고 싶다면 TextN적절한 키 값을 전달하여 다음과 같이 할 수 있습니다.

for key in Text1 Text2
do
    printf 'Key %s:\n' "$key"
    yqText="$key" yq 'eval("." + env(yqText) + ".text_2[]") | select(. == "file*")' file.yaml |
        while IFS= read -r val
        do
            printf 'Value: %s\n' "$val"
        done
    echo
done

아직 설치 하지 않았다면 yqGithub 저장소에서 직접 설치할 수 있습니다.https://github.com/mikefarah/yq, 또는 호스팅 환경인 경우 변경 게시판에 문의하세요.

관련 정보