sed: Remove tudo do ponto após FQDN

sed: Remove tudo do ponto após FQDN

Sou novo sede estou tendo alguns problemas para fazê-lo funcionar.

O que eu quero é isso:

abc.ztx.com. A 132.123.12.44 ---> abc.ztx.com

Usei o padrão abaixo, mas não parece funcionar:

echo "abc.ztx.com. A 132.123.12.44" | sed 's/\.\s.+//g'

Verifiquei o regex usando regex101.com e padrão, \.\s.+corresponde . A 132.123.12.44perfeitamente à peça. Por que não está funcionando com sed.

Agradeço sua ajuda. Obrigado.

Responder1

sedusa expressões regulares básicas POSIX (BRE) por padrão. \sé uma PCRE (expressão regular compatível com Perl) que é equivalente ao BRE [[:blank:]](acho que corresponde a espaços e tabulações, ou possivelmente [[:space:]]corresponde a um conjunto maior de caracteres de espaço em branco). O +é um modificador de expressão regular estendida POSIX (ERE), que é equivalente a \{1,\}um BRE.

Então tente

sed 's/\.[[:blank:]].*//'

em vez de. Você pode substituir [[:blank:]]por um caractere de espaço se não precisar combinar as tabulações:

sed 's/\. .*//'

Observe que não há necessidade de fazer a substituição com a gbandeira, pois só haverá uma única correspondência. Além disso, o .+que você usa pode ser substituído por .*em vez de, .\{1,\}pois não nos importamos se existem outros caracteres (basta excluir todos eles).

Relacionado:

Responder2

Se você estiver usando Gnu/Linux, ou qualquer outro Gnu, então você terá o Gnu sed. Gnu sed tem a -ropção que permite isso.

Adicione a opção -rde alterar o dialeto do regex.

por exemplo

echo "abc.ztx.com. A 132.123.12.44" | sed -r 's/\.\s.+//g'

Responder3

Sua pergunta pergunta especificamente sobre sed, mas eu usaria cutpara isso.

Se você consegue conviver com um ponto final, então:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1

abc.ztx.com.

Se você não consegue conviver com o ponto final, então:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | rev | cut -d. -f2- | rev

abc.ztx.com

ou:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | sed -e "s/\.$//"

abc.ztx.com

Responder4

Ainda outra possibilidade usando awk, com .(ponto + espaço) especificado como separador de campos:

echo "abc.ztx.com. A 132.123.12.44" | awk -F '\\. ' '{print $1}'

abc.ztx.com

informação relacionada