Есть ли в grep что-то похожее на * в подстановке имен файлов?

Мне необходимо найти все строки, которые начинаются с заглавной буквы И заканчиваются словом «собака», за которым следует точка.

Я знаю, что для поиска строк, начинающихся с заглавной буквы, я бы сделал: egrep ^ [A-Z] filename

И чтобы найти строки, заканчивающиеся на «собаку». Я бы сделал: egrep dog. $ Filename

Однако, как бы я сделал их вместе? Я пробовал: egrep ^ [A-Z] * dog. $ Filename

, но это не похоже на работу. При подстановке имени файла символ * представляет собой строку любой длины или даже без строки.

-1
задан 28 September 2013 в 15:23

2 ответа

Вам нужно написать следующую схему: [A-Z]. * Собака.

[A-Z] ожидает, что заглавная точка означает, что это любой символ. То, как у вас есть «*», означает, что столько заглавных букв. Если вам нужны буквы алфавита, то вместо «.» положить [а-я]. Звезда не работает как подстановочный знак, как в командной строке bash, но скорее учитывает предыдущий символ.

Я надеюсь, что это было полезно.

0
ответ дан 28 September 2013 в 15:23

Вам, вероятно, нужно это:

grep '^[[:upper:]].*dog\. 

Вы, вероятно, уже знаете якоря ^ (для начала строки) и $ (для конца строки). Вместо того чтобы использовать [A-Z], вам лучше использовать класс [[:upper:]], так как он может лучше справляться с выделенными заглавными буквами (учтите, что если ваш вопрос касается домашней работы, ваш учитель может не знать об этом - мой опыт что курсы командной строки в школах - одно из худших из существующих учений, учителя обычно некомпетентны в этом, поскольку они используют древние методы ... (плохие) привычки умирают тяжело!).

Затем вы ищете .*, где точка . соответствует любому символу, а затем .* означает любое число любого символа.

Наконец, вам нужен экранированный период \., иначе строка, заканчивающаяся на dogs или dog!, будет соответствовать ..., поскольку период без экранирования соответствует любому символу.

Надеюсь, это поможет!

file

Вы, вероятно, уже знаете якоря ^ (для начала строки) и $ (для конца строки). Вместо того чтобы использовать [A-Z], вам лучше использовать класс [[:upper:]], так как он может лучше справляться с выделенными заглавными буквами (учтите, что если ваш вопрос касается домашней работы, ваш учитель может не знать об этом - мой опыт что курсы командной строки в школах - одно из худших из существующих учений, учителя обычно некомпетентны в этом, поскольку они используют древние методы ... (плохие) привычки умирают тяжело!).

Затем вы ищете .*, где точка . соответствует любому символу, а затем .* означает любое число любого символа.

Наконец, вам нужен экранированный период \., иначе строка, заканчивающаяся на dogs или dog!, будет соответствовать ..., поскольку период без экранирования соответствует любому символу.

Надеюсь, это поможет!

0
ответ дан 28 September 2013 в 15:23

Другие вопросы по тегам:

Похожие вопросы: