Ваша проблема - [^^]
часть вашего регулярного выражения.Это класс отрицательных символов (^
внутри [ ]
отрицает то, что находится в скобках).
Вместо этого, я думаю, вы ищете ^
вне скобок, чтобы заявить «началострока 'и затем отрицательный символьный класс [^0-9]
для чего-то, кроме цифры в начале строки:
$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^0-9]'
line 2
line 4
no num
Затем добавьте .*
для "чего-либо любой длины" и [0-9]
чтобы хотя бы одна цифра отфильтровывалась для строк, в каждой из которых есть цифра:
$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^0-9].*[0-9]'
line 2
line 4
Или, если вы хотите знать язык, вы можете использовать классы символов POSIX для того же результата:
$ echo "1 line
line 2
3 line
line 4
no num" | grep '^[^[:digit:]].*[[:digit:]]'
line 2
line 4