如何在bash中获取两个点之间的字符串?

4

我有几个 git 仓库,格式如下:

product.module1.git
product.module2.git
...

现在我只想遍历这个列表,以获取所需内容。
module1
module2

我该怎么做才能实现这个目标?我已经尝试过使用grep与ls组合,但是我不知道如何删除首尾的字符串部分。


您不必在帖子中写“感谢”或“问候”,也不必签署您的姓名,因为它会自动出现在帖子的右下角。 - jub0bs
4个回答

5
如果你的 grep 支持 -P 选项:
$ grep -oP '(?<=[.])\w+(?=[.])' file
module1
module2

(?<=[.]) 是一个向后查找。在这种情况下,它匹配紧跟在句点后面的内容。

\w+ 匹配任意数量的单词字符。

(?=[.]) 是一个向前查找。在这种情况下,它匹配紧跟在句点之前的内容。


1
非常有用且非常快速。谢谢。 - Martin

2
一次 剪切 操作就能完成任务:
cut -d . -f2 file
module1
module2

或者使用awk:
awk -F. '{print $2}' file
module1
module2

1
while read -r line; do 
  if [[ "$line" =~ \.(.*)\. ]]; then
    echo "${BASH_REMATCH[1]}"
  fi
done < file

输出:

module1
module2

1
在Bash中,使用数组和IFS进行分词很容易:
var="product.module1.git"
IFS="." tokens=( ${var} )
echo ${tokens[1]}
# this outputs module1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接