3 votes

Comment utiliser sed pour remplacer les 3 derniers caractères d'une chaîne de caractères ?

Je dois extraire x caractères d'une chaîne de caractères et j'ai du mal à élargir la capacité de l'expression.

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

Si j'ai la chaîne example.com.db, je dois conserver "example.com", pour cela j'utilise

sed 's/\.db//g'

Comment modifier l'expression pour que je puisse également utiliser ce type de fichiers ? example.db.db.com.db .

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

7voto

Que vous pouvez utiliser :

's/.db$//'

Vous pouvez également utiliser :

's/...$//'

pour supprimer les 3 derniers caractères et

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

pour supprimer tout ce qui se trouve après le dernier point

4voto

heemayl Points 85741

Vous n'étiez pas loin, utilisez la syntaxe Regex $ pour indiquer la fin de la ligne, il n'est pas non plus nécessaire d'utiliser la fonction globale ( g ) car vous essayez de trouver 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

3voto

John O'Brien Points 21

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

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

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

3voto

A.B. Points 84870

Pour supprimer les trois derniers caractères d'une chaîne de caractères

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

Exemple

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X