![파일의 두 문자열 사이에서 URL을 추출합니다.](https://linux55.com/image/72363/%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%91%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%82%AC%EC%9D%B4%EC%97%90%EC%84%9C%20URL%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
각 줄이 다음과 같은 파일이 있습니다.
"372"^""^"2015-09-03 06:59:44.475"^"NEW"^"N/A"^""^0^"105592"^"https://example-url.com"^"example-domain < MEN'S ULTRA < UltraSeriesViewAll (18)"^"New"^"MERCHANT_PROVIDED"
파일에서 URL을 추출하고 싶습니다.https://example-url.com
sed 명령을 사용하여 이러한 정규 표현식을 시도했습니다.sed -n '/"^"http/,/"^"/p'
그러나 이것은 내 문제를 해결하지 못했습니다.
답변1
당신은 이것을 사용할 수 있습니다
sed -n 's!^.*\^"\(http[^^]*\)"^.*!\1!p'
RE 초보자에게 잠재적인 문제는 이것이 ^
지표 라는 것입니다.줄의 시작\^
, 따라서 RE 시작 부분에 위쪽 화살표를 원할 경우 이스케이프해야 합니다.
RE 패턴 매칭은 다음과 같이 설명할 수 있습니다.
^.*\^"
-- 줄의 시작 부분부터^"
패턴의 나머지 부분을 만족하는 마지막 위쪽 화살표 큰따옴표가 보일 때까지 일치합니다.\(
-- 다음으로 교체할 수 있는 교체 블록을 시작합니다.\1
http[^^]*
--http
가능한 한 많은 문자를 일치시키십시오.^
더 이상 일치하지 않을수록 좋습니다.\)
--대체 블록 끝"^.*
--큰따옴표와 위쪽 화살표를 일치시킨"^
다음 가능한 한 많이 일치시킵니다(줄 끝까지).
전체 일치 항목은 \1
패턴 블록의 시작인 으로 대체됩니다.http
답변2
grep 버전이 PCRE 모드를 지원하는 경우 시도해 볼 수 있습니다.
grep -Po '(?<="\^")http.+?(?="\^")'
답변3
이 시도:
echo "372"^""^"2015-09-03 06:59:44.475"^"NEW"^"N/A"^""^0^"105592"^"https://example-url.com"^"example-domain < MEN'S ULTRA < UltraSeriesViewAll (18)"^"New"^"MERCHANT_PROVIDED" | cut -f9 -d^
답변4
URL이 항상 따옴표로 시작하고 끝나는 경우 해당 문자열 과 다음 따옴표 앞의 모든 내용을 http
간단히 검색할 수 있습니다 .http
grep
$ grep -o 'https*://[^"]*' file https://example-url.com
sed
$ sed -n 's#.*\(https*://[^"]*\).*#\1#;p' file https://example-url.com
펄
$ perl -ne 's#.*(https*://[^"]*).*#\1# && print' file https://example-url.com
awk
약간 다른 접근 방식을 사용할 수도 있습니다.-F
필드 구분 기호 설정을 사용"
하고 다음으로 시작하는 필드를 인쇄하면 됩니다hhtp
.$ awk -F\" '{for(i=1;i<NF;i++){if($i~/^http/){print $i}}}' file https://example-url.com