Чтобы найти точное слово

Возможно, потребуется очистить выходной файл. После каждого ставит добавляйте строку

 flush stdout

См. команду tcl flush. Кроме того, можно установить выходные данные в небуферизованный режим с помощью одной строки:

 fconfigure stdout -buffering none

См. tcl fconfigure.

1
18.11.2018, 11:53
2 ответа

Да, вы получаете два совпадения, потому что и arun:1.0, и arun-vinoth:1.3содержат слово arunкак отдельное слово, оканчивающееся перед не -символами слова :и -в двух результатах(_считается словесным символом, поэтому arun_kumar:1.2равно , а не возвращается с вашей командой ).

В этом случае лучше использовать ^arun:в качестве шаблона для поиска, то есть любую строку, начинающуюся со строки arun:.

2
27.01.2020, 23:18

Определение слова для grep -w— это последовательность буквенно-цифровых символов или символов подчеркивания (в локали или ограниченная ASCII в зависимости от реализации/версии и с вариациями в поведении, если вы поиск не начинается или не заканчивается символами слова ).

Некоторые инструменты, такие как zsh, vim, xterm, позволяют настроить определение слова . Но не в любой grepреализации, которую я знаю. Поэтому, если вам нужно другое определение слова , вам нужно реализовать его самостоятельно каким-то другим способом.

Например, если ваше определение слова должно быть любой последовательностью символов, отличной от двоеточия , вы должны сделать:

grep -E '(^|:)arun(:|$)'

(arunпосле(|)начала строки(^)или :, за которым следует либо :, либо конец строки($)).

Или стандартными базовыми регулярными выражениями:

grep '^\(.*:\)\{0,1\}arun\(:.*\)\{0,1\}$'

(начало строки (^), опционально (\{0,1\}), за которой следует последовательность символов (.*), заканчивающаяся на :, за которой следует arun,необязательно, за которым следует последовательность символов, начинающаяся с :и заканчивающаяся концом строки ($)).

Или с PCRE (в дополнение к описанному выше варианту ERE, который также поддерживается PCRE)

grep -P '(?<![^:])arun(?![^:])'

(arunпри условии, что не предшествует((?<!...)отрицательный просмотр -позади оператора )и не следует за((?!...)отрицательный просмотр -опережающий оператор )символом, отличным от:([^:]); тот, который вы также можете использовать сgrep -o(для вывода только слова ),grep -b(для возврата его смещения во вводе ),grep --color(для выделения слова )как с-w)

Или, если ваше определение слова должно быть обычным словом([[:alnum:]_])плюс дефис:

grep -E '(^|[^[:alnum:]_-])arun([^[:alnum:]_-]|$)'

и так далее.

2
27.01.2020, 23:18

Теги

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