첫 번째 콜론 쌍 내부의 텍스트를 추출하는 방법

첫 번째 콜론 쌍 내부의 텍스트를 추출하는 방법

tar에서 파일을 추출할 수 없을 때마다 이와 같은 줄을 저장하는 로그 파일이 있습니다.

tar: foto/201802131354184186718718.xml: No se puede efectuar open: File exists
tar: foto/201802131365468046840684.xml: No se puede efectuar open: File exists

첫 번째 콜론 쌍 ":" 안에 텍스트를 가져와야 합니다.

foto/201802131354184186718718.xml
foto/201802131365468046840684.xml

grep을 사용해 보았지만 다음과 같은 결과를 얻었습니다.

$ grep -oP '\:\K[^\:]+' 20180213.tmp 
 foto/201802131354184186718718.xml
 No se puede efectuar open
 File exists
 foto/201802131365468046840684.xml
 No se puede efectuar open
 File exists

답변1

첫째, 가장 쉬운 방법은 cut -d: -f2 20180213.tmp.awk -F: '{print $2}' 20180213.tmp

grep그러나 귀하의 접근 방식이 실패한 이유도 설명하고 싶습니다 . 일치하기 때문이죠모두. :​이 문제를 해결하려면 정규식의 첫 번째 항목을 앞에 추가 :하여 처리 라인의 첫 번째 항목과 일치시킬 수 있습니다 ^[^\:]*. 따라서 원래 정규식 앞의 문자는 가 될 수 없습니다 :. 전체 명령은 다음과 같습니다.

grep -oP '^[^\:]*\:\K[^\:]+' 20180213.tmp

:또한 정규식에서 이스케이프 할 필요가 없으므로 다음을 사용하여 더 단순화할 수 있습니다.

grep -oP '^[^:]*:\K[^:]+' 20180213.tmp

답변2

사실, cut과 같은 다른 도구를 사용하는 것이 가장 좋은 방법이지만 sed 솔루션도 추가하고 싶습니다.

sed -r 's/^[^:]+: ?([^:]+):.*/\1/' 20180213.tmp

줄의 시작 부분부터 두 번째 콜론까지 검색하여 ':'이 아닌 문자만 검색하지만 첫 번째와 두 번째 콜론 사이의 문자만 유지합니다. 파일 이름 앞에 공백이 있는 것을 발견하여 제거했습니다.

관련 정보