我在bash shell脚本中有一个问题。我希望在两个斜线之间搜索一个字符串。Slash在这里是定界线。
说字符串是/一个/两个/,我希望能够拿起一个。
在Shell脚本中,我该如何实现这一目标?任何指针都非常感谢。
使用 awk
的-f标志将分隔线设置为 /
。然后,您可以从行中打印第一个($2
)和第二个($3
)字段。
$ cat /my/file
/one/two/
$ awk -F/ '{print $2}' /my/file
one
$ awk -F/ '{print $3}' /my/file
two
如果字符串位于变量中,则可以将其管道尴尬。
#!/bin/bash
var=/one/two/
echo $var | awk -F/ '{print $2}'
echo $var | awk -F/ '{print $3}'
path="/one/two/"
path=${path#/} # Remove leading /
path=${path%%/*} # Remove everything after first /
echo "$path" # Is now "one"
使用bash正则表达式:
$ str="/one/two/"
$ re="/([^/]*)/[^/]*/"
$ [[ $str =~ $re ]] && echo "${BASH_REMATCH[1]}"
one
$
使用 cut
:
$ str="/one/two/"
$ echo "$str" | cut -d/ -f2
one
$
将字符串转换为数组,用/
界定并读取必要的元素:
$ str="/one/two/"
$ IFS='/' a=( $str ) echo "${a[1]}"
one
$
和几个更多
> 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