저는 쉘 스크립팅을 처음 접했습니다. 이것은 이전 질문의 변형일 뿐이지만 여전히 답을 찾을 수 없습니다. 다음과 같은 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