Itu bukan cangkangnya
Sejauh ini tidak ada jawaban yang menyentuh masalah sebenarnya. Akan sangat membantu untuk menjelaskan mengapa itu tidak bekerja seperti yang Anda harapkan.
grep -i "^**" test.out
Karena Anda telah dikutip pola untuk grep , *
yang tidak diperluas oleh shell. Itu dilewatkan untuk memahami apa adanya. Ini dijelaskan di halaman manual [1] untuk bash [2] :
Menutup karakter dalam tanda kutip ganda mempertahankan nilai literal semua karakter dalam tanda kutip, dengan pengecualian $, `, \, dan, ketika ekspansi sejarah diaktifkan,!.
Ini ekspresi reguler biasa biasa
Ekspresi reguler adalah pola yang menggambarkan sekumpulan string.
*
adalah salah satu pola utama dalam ekspresi reguler. Secara default, grep mengartikannya sebagai berikut:
* The preceding item will be matched zero or more times.
Ini berarti bahwa pola Anda seperti apa adanya, ^**
tidak masuk akal. Mungkin itu mencoba untuk mencocokkan awal garis nol atau lebih , dua kali. Apapun maksudnya.
Solusinya adalah mengutipnya :
Setiap meta-karakter dengan makna khusus dapat dikutip dengan mendahuluinya dengan garis miring terbalik.
grep -i "^\*\*" test.out
[1] Saya tidak merekomendasikan membacanya. Silakan gunakan man dash
atau serupa.
[2] Tidak ada shell yang diberikan, jadi saya berasumsi bash .
*
tidak perlu melarikan diri dalam kasus khusus ini, fwiw.