J’essaie de faire correspondre le modèle ci-dessous qui a des espaces entre les deux.
-DsomeArg=some value
et pour le remplacer par le modèle ci-dessous en utilisant la commande sed.
-DsomeArg="some value"
Il peut y avoir n’importe quel nombre d’espaces entre les deux. J’ai essayé ci-dessous la commande mais sa ne fonctionne pas.
sed 's/^\(-D.*\)=(.\+\s\+.\+)/\1="\2"/' test.dat
où as. * fonctionne au lieu de. +, mais je veux correspondre à un ou plusieurs motifs. Je ne suis pas capable de trouver ce que je fais mal. Sil te plait aide moi.
cat /tmp/test | sed -r 's/^(-D.*?)=(.+\s+.+)/\1="\2"/' -DsomeArg="some value"
J’espère que ça va aider 🙂
Cela fait ce que vous avez demandé:
sed 's/=\(.*\)/="\1"/'
ou un peu plus court:
sed 's/=/="/;s/$/"/'
Mais j’ai le sentiment qu’il y a plus dans l’histoire que vous ne le dites. Par exemple, vous attendez-vous à ce que du texte suive “une certaine valeur” que vous souhaitez laisser en dehors des guillemets? Est-ce que quelque chose précède -DsomeArg
que vous ne voulez pas faire correspondre?
Avec les expressions régulières, le contexte est tout.