Encontre e substitua tudo antes de uma string de texto

2

Eu tenho uma grande lista de endereços IP (a maioria é IPv4, mas alguns são IPv6), seguidos de um espaço e, em seguida, um nome de domínio, seguido por outro espaço e o mesmo nome de domínio com "www". na frente dele. Cada instância está em sua própria linha. A lista se parece com isso ( mas é muito maior ):

23.212.109.137 at.ask.com www.at.ask.com
216.58.206.74 maps.googleapis.com www.maps.googleapis.com
2400:cb00:2048:1::6812:32a5 litscape.com www.litscape.com
104.16.244.35 loc.gov www.loc.gov
216.70.104.235 mbu.edu www.mbu.edu

Gostaria de saber dois comandos para localizar e substituir; cada um para gerar outro arquivo de texto após o último.

1) O primeiro comando deve encontrar e substituir tudo antes do "www." com "http: //" para que as linhas do segundo arquivo de texto tenham esta aparência:

http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu

2) O segundo comando deve encontrar e substituir todas as instâncias do " link ." no segundo arquivo de texto, de modo que as linhas do terceiro arquivo de texto tenham a seguinte aparência:

at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu

Obrigado.

    
por Eric Bradshaw 04.07.2017 / 16:49

3 respostas

1

Com um único comando awk :

awk '{ print $2 > "domains.txt"; print "http://"$3 > "domains_http.txt" }' file

Resultados:

> cat domains_http.txt 
http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu
> cat domains.txt 
at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu
    
por 04.07.2017 / 17:01
1

A segunda coisa é mais fácil:

$ cut -d ' ' -f 2 file.in

Isso usa cut com um espaço como delimitador e corta a segunda coluna.

Com awk , seria fácil executar as duas tarefas:

$ awk '{ print $2 }' file.in

Isso é essencialmente o mesmo que o comando cut .

$ awk '{ print "http://" $3 }' file.in

Isso leva a terceira coluna e adiciona antes http:// a ela antes de gerar a saída.

    
por 04.07.2017 / 17:01
0

Usando sed:

sed 's#.*\(www.*\)#http://#' source_file > dest_file1
sed 's#.*www\.\(.*\)##' dest_file1 > dest_file2

Explicação:

Para o primeiro requisito, comece por agrupar tudo a partir de www e substitua tudo o que não pertence a este grupo com http:// . Similar para o segundo arquivo também, mas agora inicie o agrupamento a partir de www.

Note que se você quiser que comandos façam estes trabalhos, você sempre pode alias-los em comandos personalizados.

    
por 06.07.2017 / 09:43