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
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
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
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.
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