Neue grep Version warnt “warning: stray before white space”
Ich spiele immer fleissig Updates ein.
Plötzlich überraschen mich meine Shellskripte mit der Ausgabe
grep: warning: stray before white space
Die Ursache ist schnell gefunden … eine neue Grep Version 3.8 ist aufgespielt worden, die sich offensichtlich anders verhält.
> grep --version grep (GNU grep) 3.8 Copyright (C) 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Mike Haertel and others; see <https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
Ich hielt es bisher immer so: Sonderzeichen MUSS man im Regex maskieren … und beliebige normale Zeichen KANN man immer mit Backslash maskieren und es schadet auch nicht. Letzteres ist nun offensichtlich anders.
> echo " OK" | grep "\ \ " grep: warning: stray before white space grep: warning: stray before white space OK
Zur Abschaltung der Warnung entferne ich im Regex den einem Space vorangestellte Backslash:
> echo " OK" | grep " " OK
Yep.
Soweit so gut … alles gut … dachte ich.
Es kamen in anderen Skripten aber auch Meldungen der Art
grep: warning: stray before -
Also die Suche nach einem Minus muss nun auch nicht mehr mit Backslash maskiert werden? Einmal schnell testen:
> echo "------" | grep "\-\-\-" grep: warning: stray before - grep: warning: stray before - ------
Backslash weggenommen, hagelt ebenfalls eine Fehlermeldung:
> echo "------" | grep "---" grep: unrecognized option '---' Usage: grep [OPTION]... PATTERNS [FILE]... Try 'grep --help' for more information.
Leider nein.
Die Lösung hier: Nun braucht es als Option ein Doppel-Minus. Und im Regex darf man das Minus nicht maskieren. Also so:
> echo "------" | grep -- "---" ------
Ich fürchte, die neue grep Version wird mich noch in anderen Skripten ärgern.
Kommentar hinzufügen
Die Felder Name und Kommentar sind Pflichtfelder.