Возможно, потребуется очистить выходной файл. После каждого ставит
добавляйте строку
flush stdout
См. команду tcl flush. Кроме того, можно установить выходные данные в небуферизованный режим с помощью одной строки:
fconfigure stdout -buffering none
См. tcl fconfigure.
Да, вы получаете два совпадения, потому что и arun:1.0
, и arun-vinoth:1.3
содержат слово arun
как отдельное слово, оканчивающееся перед не -символами слова :
и -
в двух результатах(_
считается словесным символом, поэтому arun_kumar:1.2
равно , а не возвращается с вашей командой ).
В этом случае лучше использовать ^arun:
в качестве шаблона для поиска, то есть любую строку, начинающуюся со строки arun:
.
Определение слова для 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:]_-]|$)'
и так далее.