문자열의 여러 부분 선택

문자열의 여러 부분 선택

저는 쉘 스크립팅을 처음 접했습니다. 이것은 이전 질문의 변형일 뿐이지만 여전히 답을 찾을 수 없습니다. 다음과 같은 txt 파일이 있습니다(한 줄, 공백 없음).

;100=Raspberry;101=Apple;102=Orange;103=Kiwi;104=grape;

나는 출력으로 101=*또는 103=*출력으로 무엇이든 선택하는 것을 좋아합니다. 따라서 출력은 다음과 같아야 합니다.

;101=Apple;103=Kiwi

수정하여 명령을 작성하려고했습니다.

grep -o -m 1 ';101=.*;\|;103=.*' file.txt

하지만 그 이후의 모든 항목이 선택됩니다 101=.*. 명령에 그렇게 나와 있다는 것은 알지만 어떻게 변경해야 할지 모르겠습니다. 우분투 16을 사용하고 있습니다.

답변1

.*가능한 한 많은 문자를 일치시키려고 노력하십시오. 그러면 나머지 줄을 얻을 수 있습니다. 따라서 (모든 문자) 대신 (세미콜론을 제외한 모든 문자)를 .사용해야 합니다 .[^;]

grep -o ';101=[^;]*\|;103=[^;]*'

-m 1한 문장으로 무엇을 달성해야할지 모르겠습니다. 어쨌든 원하는 결과를 얻으려면 출력을 한 줄로 결합해야 합니다. 그러나 나는 당신이 그것을 스스로 수행하는 방법을 알아낼 수 있을 것이라고 확신합니다(결국 그것은 당신의 연습이지 우리의 연습이 아닙니다).

답변2

동일한 효과를 얻기 위해 다음 awk 명령을 사용했습니다.

 awk -F ";" '{print ";"$3";"$5}' filename

산출

;101=Apple;103=Kiwi

관련 정보