строки grep, начинающиеся с «1» в Ubuntu


47

Я пытаюсь найти строки, которые начинаются с "1", используя

ls -1 | grep ^1*

но он возвращает строки, которые не начинаются с 1. Что мне здесь не хватает?


Еще одно замечание: если вы хотите использовать grep для ограничения lsвывода, у вас возникнут проблемы, если имена файлов содержат какие-то странные символы, такие как переводы строк ... Многие другие команды (почему-то нет ls, по крайней мере, не та версия, которую я должен проверять) есть возможность задать нулевой разделенный вывод, который затем можно безопасно обработатьgrep -z
Герт ван ден Берг

Спасибо, @GertvandenBerg! Какие проблемы могут вызывать некоторые странные символы, такие как перевод строки, для grep? Какие команды дают нулевой разделенный вывод?
Тим

1
найти с помощью -print0, большинство других инструментов GNU имеют опцию -0 или -z. (сортировать, xargs и т. д.). Если имена файлов содержат новые строки, было бы невозможно узнать, являются ли две строки именем файла, содержащим новую строку или два отдельных имени файла.
Герт ван ден Берг

Ответы:


68

Ваше регулярное выражение не означает, что вы думаете, что оно делает. Он соответствует всем строкам, начинающимся (^) с одного (1) повторного нуля или более (*) раз. Все строки соответствуют этому регулярному выражению. grep '^1'делает то, что вы хотите.


33

Вы пробовали следующее?

 ls -1 | grep "^1"

То есть уберите *, который в основном говорит grep, найдите ноль или более вхождений ^1выражения. Другими словами: сопоставьте строки, начинающиеся с 1, или нет.


13

Хотя это не отвечает на ваш вопрос, это лучшее решение для вашей цели:

ls -ld 1*

Вы можете использовать глобус оболочки для отображения списка всех файлов, которые начинаются с 1. Обратите внимание, что *в globbing оболочки имеет другое значение, чем регулярные выражения.


Спасибо! +1. Как * имеет различное значение в глобализации оболочки и в регулярных выражениях?
Тим

2
В оболочке глобус * - это подстановочный знак, означающий «0 или более любого символа». Значение регулярного выражения объясняется в ответе Отокана.
Иордания

3

^ 1. * соответствует всей строке или, как сказано выше, ^ 1 получил строку, содержащуюся в строке.

В разных стилях регулярных выражений используются разные символы, представляющие символы, некоторые параметры указывают, какой стиль вы хотите. и различные параметры указывают, хотите ли вы соответствовать всей строке, или только ее части, или всему вводу как одной строке.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.