2010-08-05 8 views
0

J'ai une instance où certaines URL sont malformées avec des signes égaux et je dois pouvoir les supprimer.Substituer un caractère dans une ligne uniquement s'il se produit avant un autre caractère spécifique

Un exemple URL cassé:

 
http://www.go=ogle.com/search?ie=UTF 

à corriger à ceci:

 
http://www.google.com/search?ie=UTF 

Il ne peut pas remplacer simplement la première occurrence de = car toutes les URL sont cassés comme ça.

Existe-t-il une méthode sed/awk ou autre expression regex pour supprimer toutes les instances de = uniquement si elles se produisent avant un point d'interrogation?

Répondre

0

utilisation

sed -e 's~\(http://[^?]*\)=\([^?]*\)~\1\2~' 

qui dit essentiellement à dépouiller un = caractère de l'intérieur tout en commençant par http:// et ayant tout sauf un ?.

modifier regardant encore, cela est beaucoup plus propre:

sed -e 's~\(http://[^/?]*\)=~\1~' 
+0

a parfaitement fonctionné, grâce – neurophobic

+0

je qualifierais que différemment, mais c'est à peu près ce que j'utiliser. Je ne savais pas que vous pourriez utiliser ~ ~ s en place. Je dirais que vous remplacez toute chaîne commençant par http: //, se terminant par =, et n'ayant pas de? Avec la chaîne d'origine, sans compter le =. – Slartibartfast

+0

@slartibartfast: J'ai mis à jour la réponse à (presque) correspondre à votre description ;-) – mvds

Questions connexes