Как извлечь строки, содержащие «g__» в конце?

Я хочу извлечь строки, заканчивающиеся на g__something . В следующем примере некоторые строки содержат g__something , за которым следует s__something . Я не хочу их извлекать. Мне нужны только те строки, которые заканчиваются на g__something .

here is the text

Только три строки в этом примере должны быть извлечены, те, которые имеют g__Bifidobacterium , g__Aeriscardovia и g__Aeriscardovia в их конце.

Как я могу это сделать?

0
задан 1 August 2020 в 21:31

1 ответ

Использование стандартной буквы оболочки диапазоны будут работать в основном, но используйте LC_COLLATE = C на всякий случай. Реализация диапазона Bash соответствует документации, но может дать неожиданные результаты для локалей, отличных от C.

LC_COLLATE=C
grep g__[a-zA-Z]*$ yourfile

Вы пропустили «$», который является символом «конца строки». Без этого $, конечно, строка соответствует любому месту в строке.


Поскольку ничего не найдено, вероятно, в конце строки есть какой-то непечатаемый символ, например пробел, табуляция, возврат каретки, ... Невозможно скажите по опубликованному изображению, поэтому просто добавьте то, что действительно находится в конце строки, перед "$" или попробуйте что-нибудь вроде (для одного или нескольких пробелов):

grep "g__[a-zA-Z]*[ ]*$"

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

[^[:print:][:blank:]]
1
ответ дан 2 August 2020 в 21:59

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

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