Печать 1 вхождения для каждого совпадения с образцом - PullRequest
0 голосов
/ 17 июня 2019

У меня есть файл, который содержит шаблон в начале каждой новой строки:

. / Боб / некоторые / текст / путь / index.html
./bob/some/other/path/index.html
./bob/some/text/path/index1.html
./sue/some/text/path/index.html
./sue/some/text/path/index2.html
./sue/some/other/path/index.html
./john/some/text/path/index.html
./john/some/other/path/index.html
./john/some/more/text/index1.html
... и т. д.

Я придумал следующий код, соответствующий шаблону ./ enjname Event/, и хотел бы вывести 1 вхождение каждого имени, НО, он либо печатает каждую строку, соответствующую этому шаблону, либо просто 1 и останавливается при использовании флаг -m 1:

Я попробовал это как простую строку grep (ниже), а также поместил в цикл for

name=$(grep -iEoha -m 1 '\.\/([^/]*)\/' ./without_localnamespace.txt)

echo $name

Мои ожидаемые результаты:

. / Боб /
./sue/
./john/

Фактические результаты:
./bob/

Ответы [ 3 ]

3 голосов
/ 17 июня 2019
awk -F'/' '!a[$2]++{print $1 FS $2 FS}' input
./bob/
./sue/
./john/
2 голосов
/ 18 июня 2019

Вы можете сделать

cut -d "/" -f2  ./without_localnamespace.txt | sort -u
0 голосов
/ 17 июня 2019

Вы, кажется, хотите уникальных вхождений, используйте

grep -Eoha '\./[^/]*/' ./without_localnamespace.txt | uniq

См. онлайн-демонстрацию

Что касается шаблона, вам не нужно экранировать косые черты, онине являются специальными метасимволами регулярных выражений.Флаг -i здесь также избыточен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...