Я хочу извлечь строки, заканчивающиеся на g__something
. В следующем примере некоторые строки содержат g__something
, за которым следует s__something
. Я не хочу их извлекать. Мне нужны только те строки, которые заканчиваются на g__something
.
Только три строки в этом примере должны быть извлечены, те, которые имеют g__Bifidobacterium
, g__Aeriscardovia
и g__Aeriscardovia
в их конце.
Как я могу это сделать?
Использование стандартной буквы оболочки диапазоны будут работать в основном, но используйте LC_COLLATE = C
на всякий случай. Реализация диапазона Bash соответствует документации, но может дать неожиданные результаты для локалей, отличных от C.
LC_COLLATE=C
grep g__[a-zA-Z]*$ yourfile
Вы пропустили «$», который является символом «конца строки». Без этого $, конечно, строка соответствует любому месту в строке.
Поскольку ничего не найдено, вероятно, в конце строки есть какой-то непечатаемый символ, например пробел, табуляция, возврат каретки, ... Невозможно скажите по опубликованному изображению, поэтому просто добавьте то, что действительно находится в конце строки, перед "$" или попробуйте что-нибудь вроде (для одного или нескольких пробелов):
grep "g__[a-zA-Z]*[ ]*$"
Обратите внимание на добавленные кавычки вокруг строки. Добавление большего количества возможных непечатаемых символов оставлено в качестве упражнения для читателя (в сценарии проще добавить эти нечетные символы), но для этого существуют классы символов, например
[^[:print:][:blank:]]