152 votes

Comment enlever les X premiers caractères d'une chaîne de caractères avec sed ?

J'écris un shell script pour Linux embarqué dans une petite boîte industrielle. J'ai une variable contenant le texte pid: 1234 et je veux enlever les X premiers caractères de la ligne, pour ne garder que 1234. J'ai plus de variables que je dois "nettoyer", donc je dois couper les X premiers caractères et ${string:5} ne fonctionne pas pour une raison quelconque dans mon système.

La seule chose que la boîte semble avoir est sed .

J'essaie de faire fonctionner ce qui suit :

result=$(echo "$pid" | sed 's/^.\{4\}//g')

Des idées ?

219voto

chepner Points 54078

Ce qui suit devrait fonctionner :

var="pid: 1234"
var=${var:5}

Vous êtes sûr bash Le shell exécute-t-il votre script ?

Même la norme POSIX

var=${var#?????}

serait préférable à l'utilisation d'un processus externe, bien que cela vous oblige à coder en dur le 5 sous la forme d'un motif de longueur fixe.

138voto

Andrew Dunn Points 7465

Voici une méthode concise pour couper les X premiers caractères en utilisant cut(1) . Cet exemple supprime les 4 premiers caractères en coupant une sous-chaîne commençant par le 5ème caractère.

echo "$pid" | cut -c 5-

50voto

Mark Longair Points 93104

Utilisez le -r (" utiliser des expressions régulières étendues dans le script ") pour sed afin d'utiliser le {n} la syntaxe :

$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234

23voto

dtp70 Points 339

Coupez les deux premiers caractères de la chaîne :

$ string="1234567890"; echo "${string:2}"
34567890

10voto

Ben Points 635

Le faire passer à travers awk '{print substr($0,42)}' où 42 est un de plus que le nombre de caractères à déposer. Par exemple :

$ echo abcde| awk '{print substr($0,2)}'
bcde
$

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