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 une petite boîte industrielle. J'ai une variable contenant le texte pid: 1234 et je veux supprimer les premiers caractères X de la ligne, donc seulement 1234 reste. J'ai plus de variables que je dois "nettoyer", donc j'ai besoin de couper 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?

83
demandé sur codeforester 2012-07-13 15:53:36

9 réponses

Cela fera le travail aussi:

echo "$pid"|awk '{print $2}'
18
répondu Arnaud F. 2012-07-13 11:58:52

Ce qui suit devrait fonctionner:

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

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

Même le{[4 conforme à 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.

144
répondu chepner 2018-03-29 18:23:47

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-
55
répondu Randy the Dev 2017-05-04 02:15:00

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

$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
42
répondu Mark Longair 2012-07-13 12:00:18

Les Chances sont, vous aurez cut ainsi. Si oui:

[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
6
répondu Shawn Chin 2012-07-13 12:04:46

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

string="1234567890"; echo "${string:2}"
6
répondu dtp70 2017-08-11 14:15:47

Tuyau à 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
$
4
répondu Ben 2014-09-12 17:53:09

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

result=`echo $pid | cut -c 5-`
2
répondu Evgeny 2017-11-25 12:43:10

Plutôt que de supprimer n caractères dès le début, vous pourriez peut-être simplement extraire les chiffres directement. Comme si...

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

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

0
répondu user1751825 2018-05-26 00:32:20