Es ist nicht die Hülle
Keine der bisherigen Antworten hat das eigentliche Problem berührt. Es wäre hilfreich zu erklären, warum es nicht wie erwartet funktioniert.
grep -i "^**" test.out
Da Sie das Muster zu grep zitiert haben , wird es von der Shell nicht erweitert. Es wird so wie es ist an grep übergeben . Dies wird auf der Handbuchseite [1] für Bash [2] erläutert :*
Durch das Einschließen von Zeichen in doppelte Anführungszeichen wird der Literalwert aller Zeichen in Anführungszeichen beibehalten, mit Ausnahme von $, `, \ und, wenn die Verlaufserweiterung aktiviert ist,!.
Es sind reguläre gewöhnliche reguläre Ausdrücke
Ein regulärer Ausdruck ist ein Muster , das eine Reihe von Zeichenfolgen beschreibt.
*
ist eines der Schlüsselmuster in regulären Ausdrücken. Standardmäßig interpretiert grep es wie folgt:
* The preceding item will be matched zero or more times.
Dies bedeutet, dass Ihr Muster in seiner jetzigen ^**
Form nicht viel Sinn macht. Möglicherweise wird zweimal versucht, den Zeilenanfang null oder mehrmals anzupassen. Was auch immer das heißt.
Die Lösung besteht darin, es zu zitieren :
Jedes Metazeichen mit besonderer Bedeutung kann durch einen Backslash zitiert werden.
grep -i "^\*\*" test.out
[1] Ich empfehle nicht, es zu lesen. Bitte verwenden Sie man dash
stattdessen oder ähnliches.
[2] Es wurde keine Shell gegeben, daher gehe ich von Bash aus .
*
muss in diesem speziellen Fall nicht entkommen, fwiw.