У меня есть очень длинный файл, содержащий пути к файлам, один на каждой строке. Я хотел бы получить список всех каталогов, перечисленных, которые являются только 1 уровнем глубоко. По сути, я хотел бы извлечь только те строки, которые имеют сингл /
в них:
Я хочу: ./somedir
Я не хочу: ./somedir/someotherdir
Я могу сделать это с grep и/или регулярными выражениями?
Конечно. Это довольно легко:
find . | grep -P '^\./[^/]*$'
... где, очевидно, команда 'находки', которую я использую только для иллюстрирования то, что Вы описали. regex работает следующим образом:
^
и $
привязки, указывающие (соответственно) начало и конец строки. Все содержание должно быть между теми двумя символами\./
литеральный период, сопровождаемый литеральной наклонной чертой вправо[^]
класс символов, который запрещает что-либо после ^
и перед ]
*
после [^/]
говорит для разрешения нуля или большего количества случаев того класса символовВы могли также сделать это как это:
dosomething | grep -P '^[^/]*/[^/]*$'
Это позволит только сингл /
на строке, в любой позиции по строке (даже первый или последний знак).