J'ai une corde comme J'ai une autre variable
newservername = "http: // newerver, http: // newererver2" p>
Je veux remplacer la valeur de Solrhost d'Old à NewserverName à l'aide de SED Can quelqu'un m'aidez ici? P>
"Solrhost": "http: // localhost: 8983, http: // localhost: 8764", code> dans un fichier appelé sampple.json.
Il pourrait y avoir de l'espace entre "Solrhost" et: ou peut-être pas, et il pourrait y avoir de l'espace entre: et " http: // localhost: 8983, http: // localhost: 8764 " p>
3 Réponses :
Utilisez la commande SED ci-dessous pour remplacer le texte.
%s/solrHost(old name)/newServerName/g
Vous êtes beaucoup, beaucoup mieux à utiliser un outil qui comprend JSON au lieu d'essayer de regrouper quelque chose avec SED code> et des expressions régulières.
JQ code>
est la manipulation de ligne de commande de JSON: < Pré> xxx pré> p>
@ Davidc.rankin je me demande s'il y a une réponse aussi bonne que le classique " N'utilisez pas d'expressions régulières pour analyser XML " un pour JSON ...
Je pense que cela couvre. Mais vous obtenez des questions originales qui ne sont pas JSON, mais vous ressemblez beaucoup à eux. Quoi qu'il en soit avec ces fichiers formatés originaires de JSON, vous jouez essentiellement de la roulette russe sans quelque chose comme JQ code> au format et validera les résultats.
sed 's%\("solrHost"[[:space:]]*:[[:space:]]*\)"[^"]*"%\1"'"$newServerName"'"%' Use single quotes around most of the script. Use % instead of / to mark the sections of the s/// (or s%%%) command. Use [[:space:]]* to cover zero or more characters in the space class. Replace with just a blank-star if you don't care about the alternatives (tabs, etc), which is probably justifiable with well-formed JSON. Capture the original "solrHost" part. Be very careful with the quotes in the replacement. "'"$newServerName"'" The first double quote will appear in the replacement text. The first single quote terminates the current single-quoted string. The second double quote starts a new double-quoted string. The replacement variable is next. The third double quote ends the double-quoted string. The second single quote starts a new (and rather short) single-quoted string. The fourth double quote will appear in the replacement text.
Cela dépend davantage de la mise en page des champs. Les chances sont que ce serait bien, mais si le JSON est sur une seule ligne, le code plus simple pourrait remplacer les mauvaises informations alors que le code certes plus complexe dans la réponse ne ferait pas cette erreur.
Vous êtes correct et vous auriez certainement besoin des différents délimiteurs de substituts alternatifs, par ex. sed '/ ^ "SOLRHOST" / s @ "http. * $ @'" $ newserverName "@ ' code>
Règle 1 du travail avec JSON: Utilisez un outil qui comprend le format, comme
JQ code>.