LINUX.ORG.RU

(sed) Вывести строку между тегами

 , , ,


0

1

Есть html файл в котором несколько раз встречается следующий тег:

data-src="https://mysait.ru/1.jpg"

Необходимо выдать лишь первое вхождение из этого html файла. Пытаюсь делать так:

cat test35.html | sed -ne '/data-src="/{s/.*data-src="\(.*\).*/\1/p;q;}' | sed -r 's/".+//'

однако получаю последнее вхождение, а не первое.

Подскажите, где ошибся и спасибо заранее!

<img data-src="path/to/image1.jpg" src="" alt="" />
<img data-src="path/to/image2.jpg" src="" alt="" />
<img data-src="path/to/image3.jpg" src="" alt="" />
<img data-src="path/to/image4.jpg" src="" alt="" />
#!/usr/bin/env lua
print(io.open(arg[1],'r'):read('*a'):match('data.src."(%S+)"'));
dron@gnu:~$./first.lua tt.html
path/to/image1.jpg
LINUX-ORG-RU ★★★★★
()

Вариант на awk:

<img data-src="path/to/image1.jpg" src="" alt="" />
<img data-src="path/to/image2.jpg" src="" alt="" />
<img data-src="path/to/image3.jpg" src="" alt="" />
<img data-src="path/to/image4.jpg" src="" alt="" />

$ awk -F\" '/data-src/{print $2;exit}' 1.html
path/to/image1.jpg
iron ★★★★★
()
Ответ на: комментарий от iron
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <string.h>

#define pattern "data-src="
#define formats "%1023s"

int main(int argc, char *argv[])
{
    char * inputs = NULL;
    size_t len=0;
    char * result = malloc(1024);
    char * ptr = NULL;
    while(getline(&inputs,&len,stdin) != -1)
    {
        if((ptr=strstr(inputs,pattern)))
        if(sscanf(ptr,pattern formats,result) == 1)
        {
            result[strlen(result)-1]='\0';
            break;
        }
        memset(result,0,sizeof(result));
    }
    printf("%s\n",result+1);
    free(inputs);
    free(result);

    return 0;
}
dron@gnu:~$ cat tt.html | ./a.out 
path/to/image1.jpg
dron@gnu:~$ 

У меня теперь биполярочка 😱 CLUA меня луа пакусала 🐩

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Альтернативный вариант. Разминка для ума перед сном)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define pattern "data-src=\""

int main(int argc, char *argv[])
{
    char *inputs, *result = NULL;
    size_t len = 0;
    while(getline(&inputs,&len,stdin) != -1)
    {
        if((result=strstr(inputs,pattern))) {
            result = result + strlen(pattern);
            printf("%s\n", strtok(result, "\""));
            break;
        }
    }
    free(inputs);
    return 0;
}

iron ★★★★★
()