Неуверенность в выводе 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