Sou novo sed
e 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.44
perfeitamente à peça. Por que não está funcionando com sed
.
Agradeço sua ajuda. Obrigado.
Responder1
sed
usa 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 g
bandeira, 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 -r
opção que permite isso.
Adicione a opção -r
de 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 cut
para 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