On Wednesday 13 December 2006 11:18, Heinz W. Pahlke wrote:
Ich will z.B. "z.\,B." finden:
grep -i "z.\,B." *.tex geht logischerweise nicht, aber
grep -i "z\.\\,B\." *.tex eigenartigerweise auch nicht.
Warum? Und wie geht es dann?
Vielleicht hilft das hier ein bißchen weiter: 0 r2@opi ~$ echo 'z.\,B.' z.\,B. 0 r2@opi ~$ echo "z.\\,B." z.\,B. 0 r2@opi ~$ echo 'z.\,B.' | grep -i 'z.\,B.' 1 r2@opi ~$ echo 'z.\,B.' | grep -i 'z.\\,B.' z.\,B. 0 r2@opi ~$ echo 'z.\,B.' | grep -i "z.\\,B." 1 r2@opi ~$ echo 'z.\,B.' | grep -i "z.\\\,B." z.\,B. 0 r2@opi ~$ echo 'z.\,B.' | grep -i "z.\\\\,B." z.\,B. Besonders interessant sind diese beiden Fälle: 'z.\,B.' und "z.\\,B.". Beide matchen nicht, weil grep einen regulären Ausdruck will und \, eben nur ein Komma meint. In beiden Fällen wird an grep nur z.\,B. übergeben, wie aus dem 2. echo-Befehl am Anfang sichtbar wird. Das Problem ist wie immer das Quoting der Shell. Du willst grep z.\\,B. übergeben, also kannst Du schreiben 'z. \\,B.' oder "z.\\\\,B.". Bei "z.\\\,B." faßt die Bash die ersten 2 Backslashes zu einem zusammen und trifft dann auf \,. Hier denkt sie sich dann, Du hättest einen Backslash vergessen und hilft Dir. Daher funktioniert diese Variante auch. Torsten