Je postule sed 's/^ bug*/__/'
à
ref bug
bug ref
et obtenir
ref __
__ ref
La même chose est répondu pour perl, perl -ni -e 's/^ bug/__/; print'
. Un exemple de fichier peut être téléchargé ici . Sed et perl sont des utilitaires cygwin que je lance à partir de la ligne de commande Windows. Quand je les exécute à travers cygwin bash, cela n'arrive pas.
Tout d'abord, utilisez ceci à la place:
De cette façon, cela fonctionnera pour plusieurs espaces avant
bug
et un ou plusieurs tirets après. Ce n'est cependant qu'un détail mineur. La commande que vous avez postée fonctionne bien sur ma Debian.Pourriez - vous poster le même fichier que vous essayez de modifier quelque part? Je suppose que vous avez des fins de ligne de style Windows ou Mac, ce qui peut confondre sed. Si j'ai raison, cela devrait aider:
Ensuite, exécutez à nouveau la même
sed
commande sur le fichier.Si cela ne fonctionne pas, il peut y avoir quelque chose de spécifique à propos de cygwin
sed
. Essayez plutôt cette commande Perl (après vous être assuré que le caractère de fin de ligne correspond\n
à la commande ci-dessus):la source
\n
) à la fin de la ligne, mais cela ne devrait pas être pertinent ici. Ma commande Perl et votre commande sed donnent le résultat souhaité. Essayez plutôt ceci:sed -b s/^ bug--*/__/
est-ce que ça marche?sed -b 's/^ bug*/__/'
àspaces ref spaces bug
je reçoisspaces ref spaces __
et 's / ^ \ s * bug * / __ /' produit `` espaces ref__(Ceci est censé être un commentaire, mais je n'ai pas assez de réputation pour ajouter un commentaire pour le moment ...)
Tu viens de frire mon cerveau. Dans mon Cygwin, la même chose se produit. J'étais choqué. Cela semble être un bogue dans la façon dont les caractères génériques sont gérés, qu’ils utilisent la syntaxe d’expression régulière ou le style glob (glob - style est où * signifie «n’importe quel nombre de caractères», expression régulière * signifie «0 ou plusieurs des personnages précédents '.
Alors je l'ai essayé dans mon shell QNX. Cela fonctionne IFF je n'essaye pas d'utiliser un bogue plus avant, comme dans "s / ^ + bug - / __ /". Je peux substituer un * à la place du + et cela fonctionne. Je pense que certaines implémentations de sed ont du mal à choisir la syntaxe regex ou glob et le résultat est un désordre imprévisible.
Je n'ai pas essayé Perl (je ne l'ai pas encore installé sur cette nouvelle machine), mais je serais doublement choqué si Perl le traitait aussi mal.
Pour répondre à votre question, autant que je sache et environ 100 000 de mes amis les plus proches sur Google, votre compréhension de la manière dont l'opérateur ^ devrait fonctionner est exacte.
la source