Il y a deux interprétations possibles de votre question. Comme d'autres l'ont déjà souligné, [^x]
correspond à un seul caractère qui n'est pas x
. Mais une chaîne vide n'est pas non plus x
alors peut-être cherchez-vous [^x]\|^$
.
Aucune de ces réponses ne s'étend aux séquences de plusieurs caractères, ce qui est généralement ce que les gens recherchent. Vous pourriez construire minutieusement quelque chose comme
[^s]\|s\($\|[^t]\|t\($\|[^r]\)\)\)
pour composer une expression régulière qui ne correspond pas à str
mais une solution beaucoup plus simple en sed
est de supprimer toute ligne qui fait match str
puis gardez le reste ;
sed '/str/d' file
Perl 5 a introduit un moteur regex beaucoup plus riche, qui est désormais standard en Java, PHP, Python, etc. Parce que Perl supporte utilement un sous-ensemble de la technologie sed
vous pourriez probablement convertir un simple sed
script à Perl pour pouvoir utiliser une fonctionnalité utile de ce dialecte regex étendu, comme les assertions négatives :
perl -pe 's/(?:(?!str).)+/not/' file
remplacera une chaîne qui n'est pas str
avec not
. Le site (?:...)
est un groupe non capturant (contrairement à ce qui se passe dans de nombreuses sed
une parenthèse non encodée est un métacaractère en Perl) et (?!str)
est une assertion négative ; le texte immédiatement après cette position dans la chaîne ne doit pas être str
pour que l'expression rationnelle corresponde. Le site +
répète ce modèle jusqu'à ce qu'il ne corresponde pas. Remarquez que l'assertion doit être vraie à chaque position dans la correspondance, donc nous correspondons un caractère à la fois avec .
(les débutants se trompent souvent et n'affirment par erreur qu'au début d'un motif plus long, qui pourrait cependant correspondre à str
quelque part à l'intérieur, ce qui entraîne une "fuite").
2 votes
[^X]
est un caractère quelconque, maisX
. PS : bien que nous sachions ce que vous voulez dire, SED ne devrait pas prendre la majuscule.0 votes
@Sanjay Ok je vais dé-capitaliser sed. Pouvez-vous poster une réponse dans la section des réponses la prochaine fois, et non dans les commentaires ?