Como calcular URLs de um arquivo, dado um número de referência?

1

Digamos que eu tenha um arquivo de texto como este: chamei Olá

1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/

Se for dado o número de referência, como eu usarei os links?

$ grep hello '1.'   # (what should be here to just get the link?)

Por exemplo, quero que isso seja gerado: link somente

    
por shah 25.01.2018 / 20:48

5 respostas

2

Usando apenas o comando grep:

grep --perl-regexp --only-matching '(?<=^1\. ).*' hello

Algumas explicações:

  • - perl-regexp para ativar o regexp de estilo Perl
  • - somente correspondência para exibir apenas a parte que corresponde a
  • (? < = ^ 1 \.) significa: precedido por uma linha que começa com '1. '(' ^ ^ = 'restrição de início de linha')

Como sugerido por user1404316 , a constante '1' pode ser substituída por uma variável:

IDX=1
grep --perl-regexp --only-matching "(?<=^${IDX}\. ).*" hello
    
por 25.01.2018 / 20:57
0

use o padrão sed (número) para selecionar a linha & mantenha apenas a parte que você deseja: o URL

-bash-4.4$ cat > toto
1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/
-bash-4.4$ sed '/2/ !d ; s/.*\ //' toto
https://www.bob.ca/
-bash-4.4$ 
    
por 25.01.2018 / 20:52
0

Um grep normal em si só fornece a linha correspondente. Remover a parte inútil dessa é outra etapa.

Primeiro, você provavelmente deseja um padrão mais parecido com ^1\. . O cursor circunscreve a correspondência no início da linha, e a barra invertida faz com que o ponto corresponda apenas a um ponto literal, em vez de "qualquer caractere", que é o significado especial de um ponto sem escape. Sem eles, o padrão corresponderia a um 1 como parte do URL ou a um número 12 no início da linha, etc.

Depois, você precisa remover o número no começo da linha. sed é útil aqui. sed removeria qualquer número de dígitos, mais um ponto e um espaço no início da linha. Então poderíamos escrever isso:

$ grep -e '^1\.' urls | sed 's/^[0-9]*\. //'

Mas o comando de substituição de sed também funciona como uma condição, isso tentaria substituir o número fornecido por nada e imprimir a linha resultante se a substituição fosse feita:

$ sed -ne 's/^1\. //p' urls

( -n significa não imprimir todas as linhas, como é o comportamento padrão.)

    
por 25.01.2018 / 21:08
0

Use egrep e a saída corresponde apenas:

grep '^1\.' hello | egrep -o 'http.+'

O identificador 1. é encontrado pesquisando no início da linha com ^ . A opção -o mostrará --only-matching e .+ é uma expressão regular que corresponderá todos os caracteres ao fim de linha.

    
por 25.01.2018 / 22:13
0

É mais simples usar o awk:

$ awk '"2."==$1{print $2}' hello

https://www.bob.ca/

Use qualquer número escolhido em vez de 2. para selecionar outras linhas.

    
por 25.01.2018 / 22:01

Tags