Comment puis-je supprimer les premiers caractères X de la chaîne en utilisant sed?

J’écris un script shell pour Linux embarqué dans un petit boîtier indussortingel. J’ai une variable contenant le texte pid: 1234 et je veux supprimer les premiers caractères X de la ligne, donc seulement 1234 rest. J’ai plus de variables à “nettoyer”, donc je dois couper X premiers caractères et ${ssortingng: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 ce qui suit pour travailler:

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

Des idées?

Cela fera aussi le travail:

 echo "$pid"|awk '{print $2}' 

Les éléments suivants devraient fonctionner:

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

Êtes-vous sûr que bash est le shell qui exécute votre script?

Même la conformité 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 modèle de longueur fixe.

Voici une méthode concise pour couper les premiers caractères X en utilisant cut(1) . Cet exemple supprime les 4 premiers caractères.

 echo "$pid" | cut -c 4- 

Utilisez l’option -r (“utilisez des expressions régulières étendues dans le script”) pour sed afin d’utiliser la syntaxe {n} :

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

Les chances sont, vous aurez aussi bien cut . Si c’est le cas:

 [me@home]$ echo "pid: 1234" | cut -d" " -f2 1234 

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

 ssortingng="1234567890"; echo "${ssortingng:2}" 

le canaliser à travers awk '{print substr($0,42)}' où 42 est un de plus que le nombre de caractères à supprimer. Par exemple:

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

Une autre façon, en utilisant cut au lieu de sed .

 result=`echo $pid | cut -c 5-` 

Plutôt que de supprimer n caractères, vous pourriez peut-être simplement extraire directement les chiffres. Ainsi…

 $ echo "pid: 1234" | grep -Po "\d+" 

Cela peut être une solution plus robuste et semble plus intuitive.