Sed remplacer les astérisques
Je suis en train de remplacer une série d'astérix symboles dans un fichier texte avec un -999.9 à l'aide de sed. Cependant je ne peux pas comprendre comment échapper correctement le symbole générique.
par exemple
$ echo "2006.0,1.0,************,-5.0" | sed 's/************/-999.9/g'
sed: 1: "s/************/-999.9/g": RE error: repetition-operator operand invalid
Ne fonctionne pas. Et
$ echo "2006.0,1.0,************,-5.0" | sed 's/[************]/-999.9/g'
2006.0,1.0,-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9,-5.0
met un -999.9 pour tous * qui n'est pas ce que j'ai prévu que ce soit.
Merci!
Vous devez vous connecter pour publier un commentaire.
Utiliser ceci:
Test:
Un de ces (et plus) est une expression régulière qui va modifier la ligne comme vous le souhaitez:
sed fonctionne sur les expressions régulières, pas de chaînes, de sorte que vous besoin de connaître la syntaxe d'expression régulière si vous allez utiliser sed et, en particulier, la différence entre les BREs (qui sed utilise par défaut) et EREs (dont certains sed peut être dit d'utiliser à la place) et PCREs (qui sed n'utilise jamais, mais certains autres outils et "regexp pions" de le faire). Seule la première solution ci-dessus est une BRE qui fonctionne sur tous les disques sur toutes les plateformes. Google est votre ami.
*
est une regex symbole qui doit être échappé.Vous pouvez même utiliser BASH chaîne de remplacement:
À l'aide de
sed
:-999.9
s depuis\**
signifie zéro ou plusieurs occurences de*
. La sortie deecho "2006.0,1.0,************,-5.0" | sed 's/\**/999.9/g'
est999.92999.90999.90999.96999.9.999.90999.9,999.91999.9.999.90999.9,999.9,999.9-999.95999.9.999.90999.9
j'aurais attendu que vous ayez besoin d'\*\**
pour un ou plus, comme\*+
, shell, comme vous le faites dans sed et d'autres outils, mais il est clair que vous n'avez pas et idk pourquoi!\**
n'est même pas une regex c'est un glob motif correspondant à un littéral*
suivie par quoi que ce soit et c'est pourquoi j'ai,
à la fin pour arrêter cela.* is a regex symbol
à* is a wildcard symbol meaning repetition that's used in the shell for globbing and in UNIX tools like sed, grep, awk for regexps
et puis l'état qui est qui dans votre 2 scripts?Ay,
*
sont spéciaux méta caractère qui répète le jeton précédent zéro ou plusieurs fois. Échapper*
-afin de correspondre à littérale*
caractères.Lorsque cette possibilité a été introduite en rester bouche bée, je n'ai aucune idée!!!!