2 votes

sed : supprimer tous les caractères sauf les n derniers caractères

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-would$normally~be,here--pe_-l4_mBY et ce que je veux finir avec 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 réellement stockée dans un fichier, j'ai juste utilisé cat food à titre d'exemple.

Le système d'exploitation est macOS High Sierra 10.13.6 et bash la version est 3.2.57(1)-release

5voto

anubhava Points 172509

Vous pouvez utiliser ce sed avec un groupe de capture :

sed -E 's/.*(.{11})$/\1/' file

-pe_-l4_mBY

3voto

chepner Points 54078

Les expressions régulières de base (utilisées par défaut par sed ) exigent que les parenthèses du groupe de capture et les accolades de l'expression d'accolade soient échappées. ( y { sont autrement traités comme des caractères littéraux à faire correspondre.

$ cat food | sed 's/^.*\(.\{3\}\)$/\1/'
mBY

En revanche, demander explicitement sed pour utiliser des expressions régulières étendues avec le -E inverse le sens, avec \( y \{ étant les caractères littéraux.

$ cat food | sed -E 's/^.*(.{3})$/\1/'
mBY

2voto

tripleee Points 28746

Essayez aussi ceci :

grep -o -E '.{11}$' food

grep como sed accepte un nombre arbitraire d'arguments pour le nom de fichier, il n'est donc pas nécessaire d'avoir un fichier séparé pour le nom de fichier. cat . (Voir aussi utilisation inutile de cat .)

1voto

ctac_ Points 2023

Vous pouvez utiliser la queue ou l'expansion des paramètres :

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

-1voto

karakfa Points 604

Également avec rev/cut/rev

$ echo abcdefghijklmnopqrstuvwxyz | rev | cut -c1-11 | rev 

pqrstuvwxyz

man rev => rev - reverse lines characterwise

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X