ファイルからパターンの前後のテキストを削除する方法

ファイルからパターンの前後のテキストを削除する方法

単語が非常に長く、スペースもなく、行も多くのファイルがあります。

ファイル.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

関連情報