正则表达式搜索两个斜杠之间的字符串

时间:2014-01-24 23:01:16

标签: regex bash shell

我在bash shell脚本中有一个问题。我希望在两个斜杠之间搜索一个字符串。斜线是这里的分隔符。

让我们说这个字符串是/ one / two /,我希望能够拿起一个。

我如何实现这一点是在shell脚本中?任何指针都非常感谢。

6 个答案:

答案 0 :(得分:1)

path="/one/two/"  
path=${path#/}   # Remove leading /
path=${path%%/*} # Remove everything after first / 
echo "$path"     # Is now "one"

答案 1 :(得分:1)

使用awk的-F标志将分隔符设置为/。然后,您可以从该行打印第一个($2)和第二个($3)字段。

$ cat /my/file
/one/two/

$ awk -F/ '{print $2}' /my/file
one

$ awk -F/ '{print $3}' /my/file
two

如果字符串在变量中,则可以将其传递给awk。

#!/bin/bash
var=/one/two/
echo $var | awk -F/ '{print $2}'
echo $var | awk -F/ '{print $3}'

答案 2 :(得分:1)

使用正则表达式:

$ str="/one/two/"
$ re="/([^/]*)/[^/]*/"
$ [[ $str =~ $re ]] && echo "${BASH_REMATCH[1]}"
one
$ 

答案 3 :(得分:1)

使用cut

$ str="/one/two/"
$ echo "$str" | cut -d/ -f2
one
$ 

答案 4 :(得分:1)

将您的字符串转换为数组,并以/分隔,并阅读必要的元素:

$ str="/one/two/"
$ IFS='/' a=( $str ) echo "${a[1]}"
one
$ 

答案 5 :(得分:1)

还有几个

> cut -f 2 -d "/" <<< "/one/two"
one
> awk -F "/" '{print $2}' <<< "/one/two"
one
> oldifs="$IFS"; IFS="/"; var="/one/two/"; set -- $var; echo "$2"; IFS="$oldifs"
one