Como deletar texto no arquivo antes e depois de algum padrão

3

Eu tenho um arquivo com palavras longas sem espaços, muitas linhas.

arquivo.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

result.txt:

https://site.site.com/user-user/fooo/210615/file.name.jpg
    
por manuel 19.11.2015 / 01:01

3 respostas

0

Basta ficar com o comando grep como na extração de números:

grep -Po "http.*?$find_number.*?\.jpg"
    
por 19.11.2015 / 02:20
0

Aqui está um perl hack Quick-and-Dirty para extrair as URLs que correspondem a uma linha "data-number" encontrada anteriormente na entrada.

#! /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";
    }
}

Exemplo de saída da entrada dada acima:

https://site.site.com/user-user/fooo/210615/file.name.jpg
    
por 19.11.2015 / 01:17
0

Isto parece-me a solução mais simples e não requer a configuração prévia de quaisquer variáveis:

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

Se você quiser evitar a saída que @manuel estava se referindo, apenas canalize-o para cut para remover a string de consulta da seguinte forma:

grep -oE "http.*$(grep data-number file.txt | cut -d'"' -f2).*\.jpg" file.txt | cut -d? -f1
    
por 19.11.2015 / 04:38