grep 사용법을 배우려고 합니다.다음과 같이 제 파이썬 패키지를 나열하는 파일이 있습니다.
channels : – conda-dependencies – 디폴트 의존관계 : – numpy = 1.21.1 = py39h6635163_0 – pyinstaller= 4.2 = py39h4dafc3f_1 – …
저는 종속성 다음에 오는 것에만 관심이 있습니다.나는 bash grep/sed/awk를 사용하여 모든 기본 Linux 도구를 사용하여 모든 행을 반복하고 어떤 변수에 python 패키지를 저장하고 다른 변수에 버전을 저장하려고 합니다. 함수를 호출합니다.첫 번째 행의 예:
$ echo 저는 1달러 2센트와 1.1달러를 벌었습니다.
도와주셔서 감사합니다.YAML 입력이 있는 경우 적절한 해결책은 yq와 같은 YAML 도구를 사용하는 것입니다.
yq eval ‘.package [] file.phpl | IFS=’=’read-r 패키지 버전 _; do echo 패키지: “$package” echo 버전: “$version” done
yq 를 인스톨 할 수 없는 경우는, Awk 를 시도해 보세요. 그러나 이것은 깨지기 쉽고 YAML 형식에 대해 가정합니다.awk /recipencies:/ { p=1; next } p { if ($1 = “-“) { split(“2, fields, “=”) print fields[1, fields[2] } else p==0 }’ file.htmlawk /recipencies:/ { p=1; next } p { if ($1 = “-“) { split(“2, fields, “=”) print fields[1, fields[2] } else p==0 }’ file.htmlawk /recipencies:/ { p=1; next } p { if ($1 = “-“) { split(“2, fields, “=”) print fields[1, fields[2] } else p==0 }’ file.htmlawk 사용 :awk ‘$1 == “-” { if (key == “recipencies:) print $NF; next } {key=$1}’ filenumpy=1.21。1=py39h6635163_0pyinstaller=4。2=py39h4dafc3f_1···에드 모트론(https://stackoverflow.com/a/66188243/14259465) ).에드 모트론(https://stackoverflow.com/a/66188243/14259465) ).당신의 질문은 두 가지 방법으로 이해할 수 있습니다.루프가 필요 없도록 grep를 원합니다.루프를 작성해야 한다는 것은 알고 있지만 루프에서 grep 사용법을 모릅니다.다음 예시와 같이 grep 이 루프를 피할 수 있습니다.파일1.txt:test1test2something_message미션: 파일을 반복하여 “test”로 시작하는 모든 아이템을 제공합니다.해결책:grep “test” 파일 1.txt=> grep는 패턴이 발견된 모든 결과를 찾을 수 있기 때문에 루프가 필요 없습니다.하지만 grep에는 패턴이 발견되면 모든 결과를 제공합니다라는 옵션은 없다고 생각하기 때문에 여기서 grep를 사용하여 루프를 작성하는 것은 피할 수 없습니다.=> grep는 패턴이 발견된 모든 결과를 찾을 수 있기 때문에 루프가 필요 없습니다.하지만 grep에는 패턴이 발견되면 모든 결과를 제공합니다라는 옵션은 없다고 생각하기 때문에 여기서 grep를 사용하여 루프를 작성하는 것은 피할 수 없습니다.이하를 사용할 수 있습니다.grep-oP “\w+=[\d.]+”테스트 한다.txt | IFS=”=” read -r PV; 내보내기 A=$P 내보내기 B=$Vdone여기서 test.txt는 다음과 같습니다.channels : – conda-dependencies – 디폴트 의존관계 : – numpy = 1.21.1 = py39h6635163_0 – pyinstaller= 4.2 = py39h4dafc3f_1 – …그리고 $A는 패키지 이름이고 $B는 버전입니다.그리고 $A는 패키지 이름이고 $B는 버전입니다.