Проверка завершения окончания каждой строки в файле буквой, сопровождаемой 8-значным номером

У меня проблема с проверкой, заканчивается ли каждая строка моих файлов буквой (A-Z (always capital)), за которой следует исключительно 8-значное число (не имеет значения, какой из них). Таким образом, у меня есть несколько файлов, и содержимое каждого файла выглядит так:

Nc1nc2cc3OCCOc3cc2s1 A10000001 CCN(CC)C1CCN(Cc2cc(I)cc(I)c2O)CC1 B100000002 CCN(CC)C1CCN(Cc2cc(cc(I)c2O)C#CCO)CC1 C10000003

Между этой «строкой» и буквой с номерами всегда есть пробел. Итак, в этом примере B100000002 есть 9 цифр после буквы. Поскольку я сделал большую часть вещей вручную, я хотел бы проверить, есть ли в моих файлах ошибки. Может ли кто-нибудь помочь мне с некоторой командой bash, чтобы я мог видеть, какие строки имеют другой, неправильный шаблон?

Спасибо!

2
задан 14 May 2018 в 17:30

4 ответа

Вы можете использовать grep, чтобы получить строки, которые не соответствуют правилу:

grep -v ' [[:upper:]][0-9]\{8\}$' file* пробел совпадает с самим собой [[:upper:]] соответствует любой прописной букве [0-9] соответствует цифре \{8\} является «квантором», это означает, что предыдущая конструкция должна повторяться 8 раз $ совпадений в конце строки -v показывает строки, которые не совпадают
3
ответ дан 17 July 2018 в 14:19

вы можете grep с perl regexp:

grep -P ' [a-zA-Z]{1}[0-9]{8}$'

-P: for perl Регулярное выражение

: регулярное выражение начинается с пробела, потому что вы хотите пробел перед заглавной буквой

[a-zA-Z]{1}: точно 1 буквенный символ в нижнем регистре или в верхнем регистре (вы можете удалить az только для верхнего регистра, т. е. [AZ] {1})

[0-9]{8} : ровно 8 числовых символов

$: конец строки

Если вы хотите отображать строки, которые не соответствуют шаблону, просто добавьте параметр -v в grep

Если вы хотите отобразить номера строк, добавьте параметр -n.

grep -Pvn ' [a-zA-Z]{1}[0-9]{8}$'
0
ответ дан 17 July 2018 в 14:19

Вы можете использовать grep, чтобы получить строки, которые не соответствуют правилу:

grep -v ' [[:upper:]][0-9]\{8\}$' file* пробел совпадает с самим собой [[:upper:]] соответствует любой прописной букве [0-9] соответствует цифре \{8\} является «квантором», это означает, что предыдущая конструкция должна повторяться 8 раз $ совпадений в конце строки -v показывает строки, которые не совпадают
3
ответ дан 20 July 2018 в 14:23
  • 1
    & quot; ... получить строки, которые не соответствуют правилу & quot; ? Разве это не понадобилось бы -v для grep -v для соответствия строк, которые не соответствуют шаблону? – Sergiy Kolodyazhnyy 14 May 2018 в 18:56
  • 2
    вы правы, когда я добавляю -v, тогда скрипт применяется ко всем строкам, без него он просто загорается некоторыми из них. – sergio 15 May 2018 в 04:26

вы можете grep с perl regexp:

grep -P ' [a-zA-Z]{1}[0-9]{8}$'

-P: for perl Регулярное выражение

: регулярное выражение начинается с пробела, потому что вы хотите пробел перед заглавной буквой

[a-zA-Z]{1}: точно 1 буквенный символ в нижнем регистре или в верхнем регистре (вы можете удалить az только для верхнего регистра, т. е. [AZ] {1})

[0-9]{8} : ровно 8 числовых символов

$: конец строки

Если вы хотите отображать строки, которые не соответствуют шаблону, просто добавьте параметр -v в grep

Если вы хотите отобразить номера строк, добавьте параметр -n.

grep -Pvn ' [a-zA-Z]{1}[0-9]{8}$'
0
ответ дан 20 July 2018 в 14:23

Другие вопросы по тегам:

Похожие вопросы: