J'essaie de supprimer tous les caractères d'une chaîne de texte à l'exception des 11 caractères restants. La chaîne est Sample Text_that-serait $ normalement ~, ici - pe_-l4_mBY
et ce avec quoi je veux finir est juste -pe_-l4_mBY
.
Voici ce que j'ai essayé:
$ cat food Sample Text_that-would$normally~be,here--pe_-l4_mBY $ cat food | sed 's/^.*(.{3})$/\1/' sed: 1: "s/^.*(.{3})$/\1/": \1 not defined in the RE
Veuillez noter que la chaîne de texte n'est pas vraiment stockée dans un fichier, j'ai juste utilisé nourriture pour chat
comme un exemple.
Le système d'exploitation est macOS High Sierra 10.13.6 et la version bash
est la version 3.2.57 (1)
5 Réponses :
Vous pouvez utiliser ce sed
avec un groupe de capture:
-pe_-l4_mBY
sed -E 's/.*(.{11})$/\1/' file
aussi avec rev/cut/rev
$ echo abcdefghijklmnopqrstuvwxyz | rev | cut -c1-11 | rev pqrstuvwxyz
man rev
=> rev - lignes inversées dans le sens des caractères code >
Les expressions régulières de base (utilisées par défaut par sed
) nécessitent à la fois les parenthèses dans le groupe de capture et les accolades dans l'expression d'accolade pour être échappées. (
et {
sont sinon traités comme des caractères littéraux à mettre en correspondance.
$ cat food | sed -E 's/^.*(.{3})$/\1/' mBY
En revanche, demander explicitement sed code > utiliser des expressions régulières étendues avec l'option
-E
inverse le sens, avec \ (
et \ {
étant les caractères littéraux. p > $ cat food | sed 's/^.*\(.\{3\}\)$/\1/'
mBY
Essayez aussi ceci:
grep -o -E '.{11}$' food
grep
, comme sed
, accepte un nombre arbitraire d'arguments de nom de fichier, il n'y a donc pas besoin d'un cat
séparé. (Voir aussi utilisation inutile de cat
.)
Vous pouvez utiliser l'extension de queue ou de paramètre:
string='Sample Text_that-would$normally~be,here--pe_-l4_mBY' echo "$string" | tail -c 11 echo "${string#${string%??????????}}" pe_-l4_mBY pe_-l4_mBY
Exemple amélioré, je n'ai pas réalisé que j'avais mis 10 caractères au lieu de 11: - /
Utilisez de la nourriture pour chat
| sed 's /^.* \ (. \ {11 \} \) $ / \ 1 /'
si vous avez besoin d'un modèle BRE POSIX.