我想删除一些行。我已经有git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git,我只需要离开roi4cio-catalogs-fe。我用了下一个代码,但它不是正常工作。echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | sed -r 's/.*\///' | sed -r 's/\.+//'
git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git
roi4cio-catalogs-fe
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | sed -r 's/.*\///' | sed -r 's/\.+//'
jk9hmnmh1#
您的命令没有给予正确的结果,因为您在此处重复了一个点1次或多次:
sed -r 's/.*\///' | sed -r 's/\.+//' ^^^
但您希望匹配点后面的一个或多个字符:
sed -r 's/.*\///' | sed -r 's/\..+//' ^^^^
要只保留最后一个/到最后一个.之前的部分,可以使用一个带有捕获组和反向引用的命令:
/
.
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | sed -E 's/.*\/([^/]+)\.[^./]+$/\1/'
产出
wbgh16ku2#
***第一个解决方案:***对于awk,您可以尝试以下代码。其中将字段分隔符设置为.com或/或.git,并根据需要打印第三个字段。
awk
.com
.git
echo "git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git" | awk -F'\\.com:|\\/|\\.git' '{print $3}'
***第二个解决方案:***使用GNU grep,请尝试以下解决方案。
grep
echo "git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git" | grep -oP '^.*?\/\K.*(?=\.git$)'
ee7vknir3#
使用awk:
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | awk -F'[/.]' '{print $3}'
使用sed:
sed
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | sed -E 's|.*/([^\.]+)\..*|\1|'
仅使用bash:
bash
IFS='/.' read _ _ var _ <<< git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git echo "$var"
或使用 * 参数扩展 *:
x='git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git' x=${x%.git} x=${x##*/}" echo "$x"
或者使用BASH_REMATCH:
BASH_REMATCH
[[ $x =~ /([^\.]+)\. ]] && echo "${BASH_REMATCH[1]}"
使用Perl:
Perl
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | perl -lne 'print $1 if m|/([^.]+)\.|'
使用grep:
echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | grep -oP '(?<=/)([^.]+)'
cidc1ykv4#
使用sed
$ echo git@gitlab.com:awg-roi-new/roi4cio-catalogs-fe.git | sed -r 's~.*/|\..*~~g' roi4cio-catalogs-fe
4条答案
按热度按时间jk9hmnmh1#
您的命令没有给予正确的结果,因为您在此处重复了一个点1次或多次:
但您希望匹配点后面的一个或多个字符:
要只保留最后一个
/
到最后一个.
之前的部分,可以使用一个带有捕获组和反向引用的命令:产出
wbgh16ku2#
***第一个解决方案:***对于
awk
,您可以尝试以下代码。其中将字段分隔符设置为.com
或/
或.git
,并根据需要打印第三个字段。***第二个解决方案:***使用GNU
grep
,请尝试以下解决方案。ee7vknir3#
使用
awk
:使用
sed
:仅使用
bash
:或使用 * 参数扩展 *:
或者使用
BASH_REMATCH
:使用
Perl
:使用
grep
:输出
cidc1ykv4#
使用
sed