Grep -m 1 não funciona

1

Estou usando o seguinte comando para analisar um elemento de formulário do HTML usando grep . A variável $RESP contém a saída de uma solicitação curl anterior ...

echo $RESP | grep -m 1 -o -E 'name="id" value="([A-Za-z0-9]+)"'

Funciona, exceto que obtém todas as instâncias de name="id" . Há mais de uma instância do elemento de formulário na página.

Eu tentei usar o -m 1 on grep para parar na primeira correspondência, mas ele ainda retorna todos eles.

Estou fazendo algo errado? Eu posso trabalhar com isso:

echo $RESP | grep -m 1 -o -E 'name="id" value="([A-Za-z0-9]+)"' | head -n 1 | cut -d '"' -f4

Mas ainda não consigo entender porque -m 1 não está funcionando.

Exemplo de entrada ...

<html>
    ...
    <input type="hidden" name="id" value="4234235325">
    ...
    ...
    <input type="hidden" name="id" value="4234235325">
    ...
    ...
    <input type="hidden" name="id" value="4234235325">
</html>

Resultado esperado:

ID: 4234235325

Como já foi mencionado, o elemento do formulário é repetido inúmeras vezes em todo o HTML. Quer seja uma codificação ou otimização insuficiente, não sei. Mas o servidor não é controlado por mim.

    
por James Jeffery 29.10.2014 / 02:52

1 resposta

4

Ao omitir as citações importantes sobre a expansão da variável RESP, você disse ao shell para separar os dados no espaço em branco, tentar modificar os dados injetando nomes de arquivos e, em seguida, colocá-los em uma única linha antes de passá-los para grep. É por isso que grep -m1 está dando a você todas as correspondências; está dando a você as correspondências para a primeira linha correspondente, o que acontece com todas elas, já que todas são apenas uma linha.

$ var=$'hello\nworld';
$ echo $var
hello world
$ echo "$var"
hello
world
$ echo $var | grep -m1 -o '.o'
lo
wo
$ echo "$var" | grep -m1 -o '.o'
lo

Então cite a expansão. %código%. Veja também link

Dito isso, echo "$RESP" | grep ... , grep e head estão longe das ferramentas certas para o trabalho. Use um analisador xml para analisar xml. Caso contrário, você corre o risco de convocar o pônei

    
por 29.10.2014 / 13:51