Неуверенность в выводе grep из-за подстановочных знаков bash
Я пытаюсь лучше понять команды bash.
ls /usr/include/ | grep \.h
Предполагается перечислить все файлы, заканчивающиеся на.h (библиотеки C), но выводит больше, чем ожидалось.
th read_db .h
ты че ар
нета ш
Если бы кто-то мог также сказать мне, как выделить жирный шрифт в вопросе, не отделяя его от остальной части имени пробелом, я бы оценил его.
1 ответ
В grep
, ваш шаблон совпадает .h
(любой символ, сопровождаемый h
) в любом месте строки, а не только в конце.
У вас в основном две проблемы:
Цитирование / экранирование
Проблема с регулярным выражением
Пояснения:
Вы сбежали
.
с помощью\.
и не использовал какие-либо кавычки или другое\
таким образом, убегающий избежал бы раковины, иgrep
получит шаблон Regex как.h
, в выражении Regex, которое означает любой символ, сопровождаемыйh
, Ваша цель сделатьgrep
относиться к.
буквально, так что вам нужно процитировать или добавить еще\
лайк:'\.h' \\.h
Теперь вторая проблема, в регулярном выражении, конец строки выражается квантификатором
$
, так как вам нужно соответствовать.h
в конце строки:'\.h$'
Итак, вместе правильное использование будет:
ls /usr/include/ | grep '\.h$'
Теперь самое главное, не разбирайся ls
,
То, что вы делаете, может быть легко и эффективно выполнено с помощью обычной оболочки:
ls /usr/include/*.h