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