J'exécute cette commande dans un shell bash sur Ubuntu 12.04.1 LTS. J'essaie de supprimer à la fois les caractères [
et les ]
caractères d'un seul coup, c'est-à-dire sans avoir à piper pour séduire une deuxième fois.
Je sais que les crochets ont une signification particulière dans une expression régulière, je les échappe donc en ajoutant une barre oblique inverse. Le résultat que j'attendais est juste la chaîne 123
mais les crochets restent et j'aimerais savoir pourquoi!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
str='[123]'; str1=${str/\[/}; str2=${str1/\]}; echo $str2
Réponses:
C'est facile, si vous suivez attentivement le manuel : tous les membres d'une classe de personnages perdent une signification particulière (à quelques exceptions près). Et] perd sa signification particulière s'il est placé en premier dans la liste. Essayer:
Cela dit:
]
et[
//
,g
.Encore une fois,
]
doit être le premier de la classe chaque fois qu'il est inclus.la source
Je ne sais pas pourquoi cela ne fonctionne pas, mais cela fonctionne:
ou ca:
Vous pouvez également essayer une approche différente et faire correspondre la chaîne à l'intérieur des crochets (en supposant que la chaîne peut être mise en correspondance facilement et n'est pas définie par les crochets):
J'ai les mêmes problèmes avec votre regex d'origine,
grep
donc je pense que ce n'est pas seulement unesed
chose.Bizarrement, ceux-ci produisent des résultats différents mais l'un d'eux correspond à ce que vous voulez:
Appliquer cela à votre original
sed
(et ajouter le/g
modificateur pour qu'il supprime les deux crochets):la source
tr
:echo '[123]' | tr -d '[]'
- évite les confusions de regexp sur l'échappement.tr
ne pouvait traduire qu'un seul caractère à la fois, mais je me trompais. Merci!Pour tout supprimer avant et après les crochets:
Si vos données sont comme ça, cela signifie toujours commencer et terminer par des crochets:
la source
Si vous avez une chaîne plus complexe comme 'abcdef [123] ghijk', vous pouvez également utiliser la commande bash interne 'cut' pour extraire le texte uniquement entre crochets:
la source
Vous pouvez échapper au support d'ouverture à l'aide de
\[
. Pour le support de fermeture, utilisez[]]
.la source