파일에서 패턴 앞뒤의 텍스트를 제거하는 방법

파일에서 패턴 앞뒤의 텍스트를 제거하는 방법

단어가 매우 길고 공백도 없고 줄도 많은 파일이 있습니다.

파일.txt:

data-number="210615"
...
.... 
....
1280654445itemitemURLhttps://site.site.com/user-user/fooo/210615/file.name.jpg?1280654445name......
...
...
...
...

#!/bin/bash
find_number=$(grep -Po 'data-number="\K[^"]*' file.txt)

get-url= (copy from "https" to "fooo/" and add variable $find_number and add from "/" to end "jpg"
maybe : get-url=("https*,*fooo/",$find-number,"/*.jpg") this is work or other idea?

echo $get-url  > result.txt

결과.txt:

https://site.site.com/user-user/fooo/210615/file.name.jpg

답변1

grep숫자 추출의 명령을 따르세요 .

grep -Po "http.*?$find_number.*?\.jpg"

답변2

다음은 입력에서 이전에 발견된 "데이터 번호" 줄과 일치하는 URL을 추출하는 빠르고 더러운 Perl 해킹입니다.

#! /usr/bin/perl

use strict;

my $datanumber = 'stringthatwillneverbeintheinput';

while(<>) {
    chomp;
    if (m/^data-number/) {
        $datanumber = $_;
        $datanumber =~ s/^.*=|"//g;
    } elsif (m/$datanumber/) {
        s/^.*(http.*\.jpg).*/$1/;
        print "$_\n";
    }
}

위에 제공된 입력에 대한 출력 예:

https://site.site.com/user-user/fooo/210615/file.name.jpg

답변3

제 생각에는 이것이 가장 간단한 해결책이며 사전에 변수를 설정할 필요가 없습니다.

grep -oE "http.*$(grep data-number file.txt | cut -d'"' -f2).*\.jpg" file.txt

@manuel이 참조하는 출력을 피하려면 파이프를 통해 cut다음과 같이 쿼리 문자열을 제거하세요.

grep -oE "http.*$(grep data-number file.txt | cut -d'"' -f2).*\.jpg" file.txt | cut -d? -f1

관련 정보