Intereting Posts
Другой сайт, обслуживаемый на многоуровневом сервере Apache при введении второго сертификата SSL Поврежденный PDF: открывает отлично, но pyPdf поручает с AssertionError Должен ли я использовать IsoHybrid для загрузки флеш-накопителей? Как разрешить искаженный звук в Debian? Как я могу получить распечатку lp * всегда * меньше и односторонней? cygwin, tail -F и быстро заполняющие / вращающиеся журналы Что делают скрипты в файле /etc/profile.d? Почему Linux печатает много отладочных сообщений при загрузке / завершении работы? Утилита командной строки для изучения бит-скручивающих хаков При загрузке большого файла сервер сообщает о некорректном размере файла Как создать файл CSV без лишних пробелов? Одновременное чтение / запись в один и тот же Unix-сокет? Отслеживание системных вызовов хрома или настройка конфигурации хрома Custom Initramfs не загружается Как работает интерфейс loopback

Удалите переднюю косую черту с помощью sed

У меня есть текстовый файл, который содержит следующие

https://git.centos.org/git/rpms/abc.git https://git.centos.org/git/rpms/abc.git/ https://git.centos.org/git/rpms/abc 

Когда я запускаю следующую команду,

 reponame=$(echo $url | awk -F/ '{print $NF}' | sed -e 's/.git\/$//' | sed -e 's/.git//') echo $reponame 

Я должен получить

азбука

Он не подходит для строк, заканчивающихся на «.git /», но он работает для других 2 случаев.

Перед тем, как напечатать последнее поле с awk, вы должны удалить конечную косую черту. В противном случае последнее поле будет пустым.

использование

 echo "$url" | sed -e 's#/$##' -e 's/\.git$//' | awk -F / '{print $NF}' 

или даже

 echo "$url" | sed -e 's#/$##' -e 's/\.git$//' -e 's#^.*/##' 

Советы:

  • Вы можете дать несколько команд sed одному вызову sed, поэтому иногда не нужно подключаться от sed к sed . Или sed -e 'cmd1' -e 'cmd2' ... или sed 'cmd1;cmd2;...' будет работать.
  • Вы можете использовать другой разделитель для команды s sed поэтому вам не нужно выходить из строчки в шаблоне (я использовал # в качестве разделителя).

Предполагая, что все ваши строки в файле имеют расширение .git

ТАКЖЕ РЕШЕНИЕ ПРЕДОСТАВЛЯЕТСЯ БЕЗ СЕПЕ

 SHW@SHW:/tmp/abc # cat a https://git.centos.org/git/rpms/abc.git https://git.centos.org/git/rpms/abc.git/ https://git.centos.org/git/rpms/abc SHW@SHW:/tmp/abc # cat a | while read line; do basename $line .git; done abc abc abc 

Я думаю, что проблема заключается в разделителе полей команды awk . Измените порядок, сначала команды sed , чем команда awk :

 reponame=$(echo $url | sed -e 's/.git\/$//' | sed -e 's/.git//' | awk -F/ '{print $NF}') echo $reponame