Mailinglist Archive: opensuse-de (2022 mails)

< Previous Next >
Re: Suchen mit grep
  • From: Torsten Foertsch <torsten.foertsch@xxxxxxx>
  • Date: Wed, 13 Dec 2006 12:09:13 +0100
  • Message-id: <200612131209.19068.torsten.foertsch@xxxxxxx>
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
< Previous Next >
Follow Ups
References