Como posso usar o sed para cortar uma linha de uma string?

2

Estou escrevendo um script para exibir as informações do registrador de domínios e estou tentando recortar algumas linhas do que eu já tenho. Atualmente, ele captura todo o texto recuado de um whois. Agora estou querendo remover o nome do domínio, o servidor Whois e o URL de referência. Eu encontrei um sed para remover uma linha com base no que ele inicia, mas parece não funcionar porque estou tentando usá-lo com uma string existente em vez de um arquivo existente. Como posso modificar isso para o trabalho?

#!/bin/bash
cyan='3[0;34m'
white='3[1;37m'
purple='3[38;5;129m'
NC='3[0m'

reg=$(whois "$1" | grep -Ei '^[[:blank:]]+.*:[[:blank:]]' | sed -e 's/^[[:space:]]*//')
reg1=$(sed /^Domain/d $reg)
printf "${cyan}Below is my best attempt at finding Registrar data:\n"
printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"
    
por Egrodo 28.05.2016 / 19:54

1 resposta

3

Usando sed com uma string

Você identificou corretamente o problema: $reg é uma string, não um arquivo. Assim, você precisa fornecer a string para sed como stdin. Substitua:

reg1=$(sed /^Domain/d $reg)

com (para bash):

reg1=$(sed /^Domain/d <<<"$reg")

Ou, para um shell POSIX geral, use:

reg1=$(echo "$reg" | sed /^Domain/d)

Simplificação: combinando os comandos grep e sed em um comando

Os comandos grep e dois sed podem ser combinados em um comando sed:

#!/bin/bash
cyan='3[0;34m'
white='3[1;37m'
purple='3[38;5;129m'
NC='3[0m'

reg=$(whois yahoo.com  | sed -En '/^[[:space:]]*Domain/d; /: / s/^[[:blank:]]+//p')
printf "${cyan}Below is my best attempt at finding Registrar data:\n"
printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"
    
por 28.05.2016 / 20:51