Запись файла со столбцами 2 с помощью сценария оболочки

Из man bashbuiltins:

ulimit [-HSTabcdefilmnpqrstuvx [limit]]

Обеспечивает контроль над ресурсами, доступными оболочке и процессам, запущенным им, в системах, позволяющих такой контроль.

Используйте ulimit -a, чтобы показать текущие ограничения.

3
29.05.2019, 11:16
3 ответа

С вашей попыткой вы не можете сопоставить все слово, которое нужно вернуть. Флаг -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:]]*\)' 
3
27.01.2020, 21:09

Использование 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, если он встречается в самом начале или в конце строки.

4
27.01.2020, 21:09

Похоже, вам просто нужна строка defи все не -пробельные символы вокруг нее. Если это так, вы можете использовать:

$ grep -Eo '\S*def\S*' file.txt 
xyzdef.123
def.jkl

\Sозначает отсутствие пробела -и поддерживается GNU grepс флагами -Eили -P.

4
27.01.2020, 21:09

Теги

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