Из man bashbuiltins
:
ulimit [-HSTabcdefilmnpqrstuvx [limit]]
Обеспечивает контроль над ресурсами, доступными оболочке и процессам, запущенным им, в системах, позволяющих такой контроль.
Используйте ulimit -a
, чтобы показать текущие ограничения.
С вашей попыткой вы не можете сопоставить все слово, которое нужно вернуть. Флаг -o
для grep
возвращает только определенную совпадающую часть регулярного выражения. Также \w
не является расширением, определенным POSIX для grep
, и может быть доступно только в версиях GNU, которые поддерживают синтаксис PCRE. На чем можно было бы сделать
grep -oP '(\w*)def[.](\w*)'
Флаг -P
включает режим регулярных выражений PCRE в GNU grep
, а флаг -o
возвращает целое слово, соответствующее заданному регулярному выражению. Регулярное выражение переводится как совпадение с нулевым или большим числом буквенно-цифровых символов, за которыми следует def
и литерал .
(, заключенный в квадратное выражение ), за которым следует ноль или более буквенно-цифровых символов.
Ниже описано использование классов символов POSIX для буквенно-цифровых символов. Но помните, что флаг -o
по-прежнему является расширением GNU
grep -o '\([[:alnum:]]*\)def[.]\([[:alnum:]]*\)'
Использование grep -o
и классов символов POSIX:
grep -o '[^[:blank:]]*def[^[:blank:]]*' file.txt
По сути, это то, что предлагает тердон , хотя и с немного другим синтаксисом (и без-E
). Это соответствует строке def
и любым не-пустым символам по обе стороны от этой строки. (не-пустой символ — это символ, который не является пробелом или табуляцией ).
Как вариант,
tr '[:blank:]' '\n' <file | grep -F 'def'
Это просто разбивает строку на несколько строк, по одной строке на пробел -разделенное слово (, где «пробел» — это символ табуляции или пробела ). Затем он применяет сопоставление простой строки с grep -F
к сгенерированным строкам, чтобы найти те, которые вас интересуют.
Ваш шаблон \wdef\w
, который с GNU grep
, если используются имена классов символов POSIX, совпадает с [[:alnum:]_]def[[:alnum:]_]
, требует, чтобы строка def
была окружена буквенно-цифровым символом или символом подчеркивания с обеих сторон.. Точка не является ни буквенно-цифровым символом, ни символом подчеркивания.
Шаблон также не будет соответствовать def
, если он встречается в самом начале или в конце строки.
Похоже, вам просто нужна строка def
и все не -пробельные символы вокруг нее. Если это так, вы можете использовать:
$ grep -Eo '\S*def\S*' file.txt
xyzdef.123
def.jkl
\S
означает отсутствие пробела -и поддерживается GNU grep
с флагами -E
или -P
.