como usar sed para substituir os últimos 3 caracteres da string

3

Eu tenho o problema de extrair a quantidade x de caracteres da string e tenho a dificuldade de aumentar a capacidade da expressão.

Eu tentei usar o comando sed.

Se eu tenho a string example.com.db eu preciso manter "example.com", para isso eu uso

sed 's/\.db//g'

Como mudar a expressão para que eu possa usar esse tipo de arquivo também example.db.db.com.db .

neste caso, o resultado final que eu preciso é de example.db.db.com

    
por Vitalik Jimbei 18.09.2015 / 09:58

4 respostas

7

você pode usar:

's/.db$//'

como alternativa, você pode usar:

's/...$//'

para remover os 3 últimos caracteres e

's/\.[^\.]*$//'

para remover tudo depois do último ponto

    
por user448115 18.09.2015 / 10:07
4

Você estava perto, use a sintaxe Regex $ para indicar o fim da linha, e também não é necessário o modificador global ( g ), já que você está tentando encontrar apenas uma correspondência:

sed 's/\.db$//' file.txt

Exemplo:

$ sed 's/\.db$//' <<<'example.db.db.com.db'
example.db.db.com

$ sed 's/\.db$//' <<<'example.db.com.db'
example.db.com
    
por heemayl 18.09.2015 / 10:03
3

No sed, $ corresponde ao fim da linha, então você pode tentar

echo example.db.db.com.db | sed 's/\.db$//'

Note que eu retrocedai o ponto para corresponder literalmente, caso contrário, ele corresponde a qualquer caractere.

    
por choroba 18.09.2015 / 10:03
2

Para remover os últimos três caracteres da string

sed 's/.\{3\}$//'

Exemplo

% sed 's/.\{3\}$//' <<< "example.db.db.com.db"
example.db.db.com
    
por A.B. 18.09.2015 / 10:12