Je veux couper une chaîne avec des crochets en utilisant sed
.
Comment éviter une erreur si je veux supprimer une chaîne avec [
? Par exemple:
$ echo '[Om/mystring' | grep -oP '(?<=[Om\\)\w+'
grep: missing terminating ] for character class
Comme le dit l’erreur fin manquante] pour la classe de caractères, le problème ici a à voir avec [
, que vous devez échapper. Sinon, il est compris comme une classe de caractères par grep.
De plus, vous dites //
, alors que vous souhaitez utiliser /
au lieu de \
en fonction de votre saisie.
Tous ensemble, cela imprime un ensemble de mots après [Om/
:
$ echo '[Om/mystring' | \grep -oP '(?<=\[Om\/)\w+'
mystring
Vous obtenez l'erreur car [
est un caractère spécial dans la syntaxe d'une expression régulière, introduisant un classe de caractères . Pour être traité comme un littéral de chaîne, il doit être échappé, à savoir \[
Si vous voulez simplement supprimer le préfixe [Om/
, il est alors plus simple d'utiliser un délimiteur qui n'apparaît pas dans le motif:
$ echo '[Om/mystring' | sed 's;\[Om/;;'
mystring