Je veux remplacer une chaîne sortie de grep
, j'ai:
$ npm info webpack | grep version
ça me sort
$ version: '2.1.0-beta.12',
mais je veux avoir:
$ 2.1.0-beta.12
Donc, je pense que je pourrais y parvenir en utilisant sed
et remplacer les sous-chaînes inutiles. Mais voici la partie difficile pour moi:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Comment peut atteindre mon objectif?
Si vous utilisez sed, vous n'avez pas besoin d'utiliser également grep. Essayer:
npm info webpack | sed -En "s/version: '(.*)',/\1/p"
Exemple:
$ echo "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p"
2.1.0-beta.12
De même, si nous utilisons awk, il n’est pas nécessaire de mettre aussi grep:
npm info webpack | awk -F"[ ',]+" '/version:/{print $2}'
Exemple:
$ echo "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}'
2.1.0-beta.12
Comment ça marche:
-F"[ ',]+"
Cela indique à awk d'utiliser des espaces, des guillemets simples, des virgules ou toute combinaison de ceux-ci comme séparateurs de champs.
/version:/{print $2}
Si une ligne contient version:
, imprimez le deuxième champ.
La commande sed
substitute (s
) attend un modèle de recherche et une chaîne de remplacement. Vous ne l'avez fourni qu'avec un modèle de recherche. Vous devez également citer correctement les chaînes dans le shell:
$ npm info webpack | grep 'version:' | sed 's/version: //'
Cela vous donnera le résultat '2.1.0-beta.12',
, ce qui n’est pas tout à fait ce que vous voulez.
Puisque la sortie de grep
est très simple, vous pouvez utiliser cut
avec le délimiteur '
pour obtenir le deuxième champ de la ligne (sans avoir besoin d'expressions régulières compliquées):
$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2
Cela vous donnera 2.1.0-beta.12
.
J'ai aussi ajouté -F
à grep
puisque la chaîne que vous recherchez est une chaîne fixed , et non une expression régulière.
Premièrement, vous pouvez essayer d’utiliser sed
:
npm info webpack | grep version: | sed 's/version: //'
ou vous pouvez utiliser awk
:
npm info webpack | grep version: | awk '{print $2}'
ce qui est probablement plus facile.