У меня проблема с проверкой, заканчивается ли каждая строка моих файлов буквой (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, чтобы я мог видеть, какие строки имеют другой, неправильный шаблон?
Спасибо!
Вы можете использовать grep, чтобы получить строки, которые не соответствуют правилу:
grep -v ' [[:upper:]][0-9]\{8\}$' file*
пробел совпадает с самим собой [[:upper:]] соответствует любой прописной букве [0-9] соответствует цифре \{8\} является «квантором», это означает, что предыдущая конструкция должна повторяться 8 раз $ совпадений в конце строки -v показывает строки, которые не совпадают вы можете 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}$'
Вы можете использовать grep, чтобы получить строки, которые не соответствуют правилу:
grep -v ' [[:upper:]][0-9]\{8\}$' file*
пробел совпадает с самим собой [[:upper:]] соответствует любой прописной букве [0-9] соответствует цифре \{8\} является «квантором», это означает, что предыдущая конструкция должна повторяться 8 раз $ совпадений в конце строки -v показывает строки, которые не совпадают вы можете 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}$'