awk строки для мерзавца - PullRequest
       10

awk строки для мерзавца

1 голос
/ 23 сентября 2019

Я пытаюсь сделать awk, чтобы получить каталог для определенных репозиториев git.

Текущий

git@ssh.gitlab.org:repo1/dir/dir/file1.git
git@ssh.gitlab.org:repo1/dir/dir/file2.git
git@ssh.gitlab.org:repo1/dir/dir/file3.git
git@ssh.gitlab.org:repo1/dir/dir/file4.git

У меня есть это ниже, используя отдельное поле, но я не уверенкак удаленно .git

awk -F':' '{print $2}' file
repo1/dir/dir/file1.git
repo1/dir/dir/file2.git
repo1/dir/dir/file3.git
repo1/dir/dir/file4.git

Желаемый результат

repo1/dir/dir/file1
repo1/dir/dir/file2
repo1/dir/dir/file3
repo1/dir/dir/file4

Ответы [ 4 ]

1 голос
/ 23 сентября 2019

С sed

$ sed 's/^[^:]*://; s/\.git$//' file
repo1/dir/dir/file1
repo1/dir/dir/file2
repo1/dir/dir/file3
repo1/dir/dir/file4
  • s/^[^:]*:// удалить до первого : с начала строки
  • s/\.git$// удалить .git с конца строки
  • вы также можете использовать sed -E 's/^[^:]*:|\.git$//g', чтобы сделать это с одной заменой
1 голос
/ 23 сентября 2019

Вы можете использовать

awk -F':' '{sub(/\.[^.\/]*$/, "", $2); print $2;}' file

Используя -F':', вы разделите все записи (строки) на поля, разделенные двоеточиями.Вы получаете доступ ко второму элементу только с помощью $2, но перед print его необходимо удалить последние . и все 0 или более символов, кроме . и / до конца поля.значение, которое выполняется с помощью sub(/\.[^.\/]*$/, "", $2).

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

С этим решением вы можете обрабатывать файлы и папки, которые могут иметь любое количество точек вих имена.

1 голос
/ 23 сентября 2019

Не могли бы вы попробовать следующее.

awk -F'[:.]' '{print $(NF-1)}'  input_file

2-е решение: Если вы не хотите вводить номер поля с жестким кодом, попробуйте выполнить следующее.

awk 'match($0,/:[^.]*/){print substr($0,RSTART+1,RLENGTH-1)}' Input_file
0 голосов
/ 23 сентября 2019

С помощью регулярных выражений вы можете использовать: (?<=:)[a-z0-9\/]*

Совпадение с чем угодно, состоящим из букв, цифр и косой черты после точки с запятой.Таким образом, он остановится на точке.

Или напрямую сопоставит все между: и.с

(?<=:).*(?=\.)

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