2
votes

sed: supprime 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-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)


2 commentaires

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.


5 Réponses :


5
votes

Vous pouvez utiliser ce sed avec un groupe de capture:

-pe_-l4_mBY

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


0 commentaires

-1
votes

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 >


0 commentaires

3
votes

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


0 commentaires

2
votes

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


0 commentaires

1
votes

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


0 commentaires