我有一个字符串,如下所示
"hub.docker.corp.net/suite/content-install:latest"
我需要获得"内容安装"从它..
所以如果任何这样的字符串我需要提取最后一部分的左边部分
所以如果字符串是
"aaaa/bbbb/cccc/dddd/eee:ff"
然后我只需要" eee"
提前致谢
答案 0 :(得分:3)
echo $x
aaaa/bbbb/cccc/dddd/eee:ff
echo $x |sed -r 's|(^.*)/(.*?):(.*)|\2|'
eee
这是使用sed
进行反向引用。这里,line被分成块,并且在替换字段中引用行的所需块,并使用\2
作为第二个字段。
或使用grep
:
echo $x |grep -oP '^.*/\K.*?(?=:)'
eee
这是从行的开头到最后/
的丢弃。然后它将打印在:
之前的文本。
答案 1 :(得分:2)
@Beatrix:试试:
echo "aaaa/bbbb/cccc/dddd/eee:ff" | awk -F'[/:]' '{print $(NF-1)}'
awk -F'[/:]' ##### making field separator as / and :, so in awk by default delimiter is space so I am making it according to your requirements.
'{print $(NF-1)}' ##### now printing the $(NF-1) field which is second last field of the line.
答案 2 :(得分:2)
我会使用一点修改后的@PS。解决方案:
grep -oP '^(.*/)?\K.*?(?=:|\z)'
测试一些不同的输入:
(echo "INPUT=RESULT"
while read -r from
do
base=$(grep -oP '^(.*/)?\K.*?(?=:|\z)' <<<"$from")
echo "$from=${base:-UNDEFINED}"
done <<'EOF') | column -s= -t
/aaa/bb:bb/fff:xx
/fff:xx
/fff:
/fff
/:xx
/
./aaa/bb:bb/fff:xx
./fff:xx
./fff:
./fff
./:xx
./
aaa/bb:bb/fff:xx
fff:xx
fff:
fff
:xx
EOF
打印
INPUT RESULT
/aaa/bb:bb/fff:xx fff
/fff:xx fff
/fff: fff
/fff fff
/:xx UNDEFINED
/ UNDEFINED
./aaa/bb:bb/fff:xx fff
./fff:xx fff
./fff: fff
./fff fff
./:xx UNDEFINED
./ UNDEFINED
aaa/bb:bb/fff:xx fff
fff:xx fff
fff: fff
fff fff
:xx UNDEFINED
答案 3 :(得分:1)
您也可以使用basename
和cut
:
basename "hub.docker.corp.net/suite/content-install:latest" | cut -d':' -f1
basename
将在最后一个&#34; /&#34;之后提供整个字符串。使用cut
命令,您可以在&#34;之前得到字符串:&#34;分隔符。
答案 4 :(得分:0)
echo "hub.docker.corp.net/suite/content-install:latest"|sed -r 's#.*/([^:]+).*#\1#'