Я хочу найти слово abc
в строке (я только хочу abc точного слова, не слова, которые содержат abc), но я получаю следующую ошибку:
echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep <abc>
удар: синтаксическая ошибка около неожиданной маркерной 'новой строки'
Вы хотите -o
(покажите только совпавшую строку), и -w
(шаблон соответствия в целом только слово)
$ echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -ow abc
abc
Благодаря steeldriver для объяснения, как можно на самом деле использовать <
и >
вместо -w
для указания на границы слова. Они должны быть \<
и \>
, но обратные косые черты должны быть заключены в кавычки, чтобы быть переданными grep, а также эти <
символы, так как у них также есть особое значение к оболочке. Так сильная кавычка выражение как это:
echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -o '\<abc\>'
или сходят с ума с обратными косыми чертами:
echo "asjhdhahsjdajhsdabcasjdhas abc asdasdabc" | grep -o \\\<abc\\\>