Подберите все, что не является числом, за которым следует буква
Извиняюсь, если на это ответили в другом месте - я немного искал и не мог найти ответ.
Предположим, у меня есть текстовый файл, который содержит кучу контента. В этом содержании находится код занятия, который всегда находится в формате числа, за которым следует заглавная буква.
Как я могу извлечь ТОЛЬКО коды Occ из файла? Говоря простым языком, я хочу удалить в файле все, что не соответствует шаблону number-capital_letter.
3 ответа
Написание скрипта, который просматривает построчно или дословно, в зависимости от того, как коды occ появляются в файле, и проверяет совпадения, возможно, используя REGEX, а затем записывает их в другой файл - простое решение.
Вы МОЖЕТЕ использовать одно совпадение с регулярным выражением для всего документа и перебирать результаты, но это может вызвать проблемы в зависимости от размера файла.
Вот грубая попытка удалить все, кроме нужных кодов, используя sed. (Обратите внимание, что я интерпретирую "число" как строку из одной или нескольких цифр, без десятичной точки или начального знака минуса.)
sed -e 's/\([A-Z]\)[0-9]*/\1/g' -e 's/[0-9]*[^0-9A-Z]*//g' -e 's/[0-9]*$//' -e '/^$/d' < filename
Первая команда удаляет что-либо после заглавной буквы, которая не является числом (и, следовательно, возможно, начало другого кода), вторая удаляет любое число, за которым следует что-то, кроме заглавной буквы, третья удаляет конечные числа, а четвертая удаляет пустые линий.
Я провел несколько тестов, и это, кажется, работает очень хорошо. Я с радостью исправлю это, если кто-нибудь сможет найти случай, когда это не удастся.