Использование Cygwin, приведенные выше команды не работают. Мне пришлось изменить приведенные выше команды, чтобы получить желаемые результаты.
$ cat > file.txt <<EOL
> data
> datalater
> 983290842
> Data387428later
> datafhj893724897290384later
> 4329804928later
> EOL
Я всегда хотел, чтобы убедиться, что мой файл имеет то, что я ожидаю, что это есть:
$ cat file.txt
data
datalater
983290842
Data387428later
datafhj893724897290384later
4329804928later
$
мне нужно запустить выражения Perl-стиль с -P
флагом. Это означало, что я не мог использовать [^0-9]+
, чья необходимость @Tom_Cammann метко указала. Вместо этого я использовал .*
, который соответствует любой последовательности символов, не соответствующих следующей части шаблона. Вот моя команда и вывод.
$ grep -P '^[Dd]ata.*\d+later$' file.txt
Data387428later
datafhj893724897290384later
$
Я хотел бы дать лучшее объяснение того, почему необходимы Perl выражения, но я просто знаю, что Cygwin-х grep
работает немного по-другому.
System Info
$ uname -a
CYGWIN_NT-10.0 A-1052207 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
Мои результаты от предыдущих ответов
$ grep '^[Dd]ata[^0-9]*\d\+later$' file2.txt
$ grep '^[Dd]ata\d+later$' file2.txt
$ grep -P '^[Dd]ata[^0-9]*\d\+later$' file2.txt
$ grep -P '^[Dd]ata\d+later$' file2.txt
Data387428later
$
При использовании этого выражения, или @Eric, я не получаю никаких результатов на выходе. Вот что я использую: grep^[D, d] ata [0-9] + later $ filename – hdub
Не понял, что вы используете grep, будет обновляться. –
Еще не кубик с этим даже в качестве копии/вставки. – hdub