파일의 두 문자열 사이에서 URL을 추출합니다.

파일의 두 문자열 사이에서 URL을 추출합니다.

각 줄이 다음과 같은 파일이 있습니다.

"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

  1. grep

    $ grep -o 'https*://[^"]*' file
    https://example-url.com
    
  2. sed

    $ sed -n 's#.*\(https*://[^"]*\).*#\1#;p' file
    https://example-url.com
    
  3. $ perl -ne 's#.*(https*://[^"]*).*#\1# && print' file
    https://example-url.com
    
  4. awk약간 다른 접근 방식을 사용할 수도 있습니다. -F필드 구분 기호 설정을 사용 "하고 다음으로 시작하는 필드를 인쇄하면 됩니다 hhtp.

    $ awk -F\" '{for(i=1;i<NF;i++){if($i~/^http/){print $i}}}' file
    https://example-url.com
    

관련 정보