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?
9 réponses
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.
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
("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
Les Chances sont, vous aurez cut
ainsi. Si oui:
[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
Couper les deux premiers caractères de la chaîne:
string="1234567890"; echo "${string:2}"
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
$
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 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.