Я пытаюсь найти строки, которые начинаются с "1", используя
ls -1 | grep ^1*
но он возвращает строки, которые не начинаются с 1. Что мне здесь не хватает?
Я пытаюсь найти строки, которые начинаются с "1", используя
ls -1 | grep ^1*
но он возвращает строки, которые не начинаются с 1. Что мне здесь не хватает?
ls
вывода, у вас возникнут проблемы, если имена файлов содержат какие-то странные символы, такие как переводы строк ... Многие другие команды (почему-то нетls
, по крайней мере, не та версия, которую я должен проверять) есть возможность задать нулевой разделенный вывод, который затем можно безопасно обработатьgrep -z
Ответы:
Ваше регулярное выражение не означает, что вы думаете, что оно делает. Он соответствует всем строкам, начинающимся (^) с одного (1) повторного нуля или более (*) раз. Все строки соответствуют этому регулярному выражению.
grep '^1'
делает то, что вы хотите.источник
Вы пробовали следующее?
То есть уберите
*
, который в основном говоритgrep
, найдите ноль или более вхождений^1
выражения. Другими словами: сопоставьте строки, начинающиеся с 1, или нет.источник
Хотя это не отвечает на ваш вопрос, это лучшее решение для вашей цели:
Вы можете использовать глобус оболочки для отображения списка всех файлов, которые начинаются с
1
. Обратите внимание, что*
в globbing оболочки имеет другое значение, чем регулярные выражения.источник
*
- это подстановочный знак, означающий «0 или более любого символа». Значение регулярного выражения объясняется в ответе Отокана.^ 1. * соответствует всей строке или, как сказано выше, ^ 1 получил строку, содержащуюся в строке.
В разных стилях регулярных выражений используются разные символы, представляющие символы, некоторые параметры указывают, какой стиль вы хотите. и различные параметры указывают, хотите ли вы соответствовать всей строке, или только ее части, или всему вводу как одной строке.
источник