web-dev-qa-db-fra.com

comment utiliser sed pour remplacer les 3 derniers caractères de la chaîne

J'ai le problème d'extraire le nombre x de caractères d'une chaîne et j'ai la difficulté d'élargir la capacité de l'expression.

J'ai essayé d'utiliser la commande sed.

Si j'ai la chaîne example.com.db, il faut que je garde "example.com", pour cela j'utilise

sed 's/\.db//g'

Comment changer d'expression pour que je puisse utiliser ce type de fichiers aussi example.db.db.com.db.

dans ce cas, le résultat final dont j'ai besoin est example.db.db.com

3
Vitalik Jimbei

vous pouvez utiliser:

's/.db$//'

alternativement, vous pouvez utiliser:

's/...$//'

supprimer les 3 derniers caractères et

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

enlever le tout après le dernier point

7
user448115

Vous étiez proches, utilisez la syntaxe Regex $ pour indiquer la fin de la ligne, sans recourir au modificateur global (g), car vous essayez de ne trouver qu'une seule correspondance:

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

Exemple :

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

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

Dans sed, $ correspond à la fin de la ligne, vous pouvez donc essayer

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

Notez que j'ai inversé le point pour qu'il corresponde littéralement, sinon il correspond à n'importe quel caractère.

3
choroba

Pour supprimer les trois derniers caractères de la chaîne

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

Exemple

% sed 's/.\{3\}$//' <<< "example.db.db.com.db"
example.db.db.com
2
A.B.