Если вы указываете локальное имя репо, то это действительно просто использовать $_:
git clone git@github.com:npm/npm.git npm-local-dir && cd $_
Но если вы не хотите перепечатывать длинные имена, то это немного уродливо, но это можно сделать с помощью sed:
git clone git@github.com:pckujawa/pattern-rec.git &&
cd `echo $_ | sed -n -e 's/^.*\/\([^.]*\)\(.git\)*/\1/p'`
EDIT: Ну, я собирался поблагодарить Manav (комментарий ниже) за лаконичный
git clone foo/bar && cd !$:t
, но он не работает в zsh (что-то вроде , как zsh делает расширения, что заставляет его не обрабатывать первую команду, как вводимую в ! $
). Я должен был посмотреть, что !$:t
сделал ( Advancing in the Bash Shell | ${me:-weverever}). !$
хватает последнюю часть предыдущей команды и :t
будет "Удалить все ведущие компоненты имени файла, оставив хвост". Хорошая информация, но мне бы хотелось, чтобы она работала с zsh (я пробовал noglob
безуспешно).
EDIT: Вместо того, чтобы использовать sed
или !$:t
(что не работает в zsh, для меня в любом случае), я нашел еще две опции (одна адаптирует https://unix.stackexchange). com/users/5685/frederik-deweerdt 's answer with https://unix.stackexchange.com/users/129926/henrik-n 's comments):
git clone git@github.com:npm/npm.git && cd $(basename $_ .git)
или
git clone git@github.com:npm/npm.git && cd ${${_%%.git*}##*/}
Вы можете использовать awk
:
$ awk -F',' '{sub(/[[:upper:]]+/,"",$2)}1' OFS=',' file
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3
если во втором поле разбросаны заглавные буквы,
awk -F ',' '{gsub(/[[:upper:]]/, X, $2)}1' OFS=, file
Bash в сочетании с sed
:
#!/bin/bash
cnt=0;
while IFS=, read a b c;
do
echo -n $a ; cnt=$[cnt+1];
sed -e 's/[^,]*,\([^,]*\).*/\1/' file |
sed -e 's/\([[:upper:]]\)//g'|
sed -e $cnt'q;d'|
tr '\n' ' ' ;
echo $c;
done < file
производит:
R1C1 123abc R1C3
R2C1 456defg R2C3
R3C1 789hijkl R3C3