grep не начало строки - PullRequest
       8

grep не начало строки

0 голосов
/ 04 октября 2018

Я хочу найти все строки в файле, содержащем число, но не в начале строки.Я пробовал следующее:

grep -E '[^^][1-9]?[0-9]+' test.txt

Однако это не работает: это выражение соответствует строкам, начинающимся с цифр, состоящих из двух (или более) цифр.Насколько я понимаю, [^^] не означает «любой символ, кроме начала строки».Почему так и как правильно это написать?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ваша проблема - [^^] часть вашего регулярного выражения.Это класс отрицательных символов (^ внутри [ ] отрицает то, что находится в скобках).

Вместо этого, я думаю, вы ищете ^ вне скобок, чтобы заявить «началострока 'и затем отрицательный символьный класс [^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
0 голосов
/ 04 октября 2018

Отредактировано в соответствии с комментарием:

Это регулярное выражение должно сделать это, оно соответствует строкам, не начинающимся с цифры (один или несколько символов), затем находит одно или несколько чисел.

^[^1-9]+?\d+

Вам необходимо установить параметр 'multiline', если вы проверяете несколько строк одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...