myfile.txt содержит следующее:
hello (ab)
hello ab
hello abcd
Я попробовал следующую команду:
$grep '\<ab\>' myfile.txt
\<
означает начало слова и \>
конец средств слова.
Таким образом, я думал, что моя команда grep эквивалентна $grep ' ab ' myfile.txt
.I ожидал, что мой вывод будет
hello ab
Но это соответствует:
hello (ab)
hello ab
Как слово определяется? Действительно ли это - строка с пространством перед ним и еще одним пространством после строки?
От man grep
The Backslash Character and Special Expressions The symbols \< and \> respectively match the empty string at the beginning and end of a word. The symbol \b matches the empty string at the edge of a word, and \B matches the empty string provided it's not at the edge of a word. The symbol \w is a synonym for [_[:alnum:]] and \W is a synonym for [^_[:alnum:]].
, Другими словами, Word является последовательностью алфавитно-цифровых символов и символов нижнего подчеркивания, и , граница слова является пустой строкой прежде или после чего-либо еще - включая пунктуацию такой как (
и )
, а также пробел. Так:
$ echo 'word-boundary' | grep -o '\<\w*\>'
word
boundary
$ echo 'word_boundary' | grep -o '\<\w*\>'
word_boundary
$ echo 'word(bound)ary' | grep -o '\<\w*\>'
word
bound
ary
Для получения дополнительной информации см. Учебное руководство Regex - Word Boundaries .
Если Вы хотите искать точное слово, необходимо использовать опцию-w. Посмотрите ниже команды:
grep -w "hello ab" file.txt
вывод - как Вы ожидали.
hello ab
, Если Вы хотите точное имя "привет ab" затем, используют-w опцию с командой grep.
Для узнающих больше опций команды grep, отошлите статью для команды grep, записанной мной: https://screwlinux.com/how-to-use-grep-command-in-linux /