Как отсортировать строки по значению sed? - PullRequest
1 голос
/ 20 февраля 2020

У меня есть несколько URL в файле, подобном этому:

https://private/report-artifact/dsop-pipeline-artifacts/container-scan-reports/anchore/enterprise/enterprise/0.6.1/2020-02-08T004236.092_2801/enterprise-0.6.1.tar
https://private/report-artifact/dsop-pipeline-artifacts/container-scan-reports/atlassian/bamboo-data-center/bamboo-agent/6.10.4/2019-12-17T185400.126_2118/bambo.tar
...

Я хочу, чтобы они сортировались по AZ согласно последнему значению , ie:

https://private/report-artifact/dsop-pipeline-artifacts/container-scan-reports/atlassian/bamboo-data-center/bamboo-agent/6.10.4/2019-12-17T185400.126_2118/bambo.tar
https://private/report-artifact/dsop-pipeline-artifacts/container-scan-reports/anchore/enterprise/enterprise/0.6.1/2020-02-08T004236.092_2801/enterprise-0.6.1.tar
...


Я могу получить значение sed последнего параметра с помощью sed 's|.*/||', что дает мне шаблон AZ, который я ищу:

bambo.tar
enterprise-0.6.1.tar

Но не уверен, как я могу "отсортировать "вся строка URL, как я хочу?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2020

Решение Barmar работает хорошо, если файлы не содержат пробелов. Вы можете обрабатывать пробелы (кроме новых строк) примерно так:

sed 's@\(.*\)/\(.*\)@\2/\1/\2@' | sort -t/ | sed -e 's@[^/]*/@@'

, но если пути содержат новые строки, использование sed будет довольно безнадежным. Выше немного чище с awk:

awk '{print $NF,$0}' FS=/ OFS=/ | sort -t/ | sed -e 's@[^/]*/@@'
2 голосов
/ 20 февраля 2020

Дублируйте имя файла в качестве дополнительного поля, отсортируйте по этому полю, затем удалите дополнительное поле.

sed 's/[^/]*$/& &/' | sort -k 2 | cut -d' ' -f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...