соответствуйте всем строкам, содержащим только один '/' символ

У меня есть очень длинный файл, содержащий пути к файлам, один на каждой строке. Я хотел бы получить список всех каталогов, перечисленных, которые являются только 1 уровнем глубоко. По сути, я хотел бы извлечь только те строки, которые имеют сингл / в них:

Я хочу: ./somedir
Я не хочу: ./somedir/someotherdir

Я могу сделать это с grep и/или регулярными выражениями?

2
задан 19.03.2014, 16:46

0 ответов

Конечно. Это довольно легко:

find . | grep -P '^\./[^/]*$'

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

  • ^ и $ привязки, указывающие (соответственно) начало и конец строки. Все содержание должно быть между теми двумя символами
  • \./ литеральный период, сопровождаемый литеральной наклонной чертой вправо
  • [^] класс символов, который запрещает что-либо после ^ и перед ]
  • * после [^/] говорит для разрешения нуля или большего количества случаев того класса символов

Вы могли также сделать это как это:

dosomething | grep -P '^[^/]*/[^/]*$'

Это позволит только сингл / на строке, в любой позиции по строке (даже первый или последний знак).

6
ответ дан 08.12.2019, 04:57

Работы решения для @Brians, это - более универсальное, которому не нужен a ./ вначале:

grep -P '^[^/]*/[^/]*$'

Например:

/aa/somedir
test/somedir/someotherdir
somedir/otherdir

--> somedir/otherdir
2
ответ дан 08.12.2019, 04:57

Теги

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