选择字符串的第一部分

时间:2013-06-13 13:07:46

标签: linux bash unix sed awk

如何从字符串中提取子字符串。例如,来自字符串:

'/home/auto/gift/surprise'

仅采取:

'/home/auto/'

请注意,'/home/auto/gift/surprise'可能会有所不同,即,不是有4个目录级别,它可能会转到6或8,但我只对前2个文件夹感兴趣。

到目前为止,这是我尝试过的,没有成功:

$ pwd
'/home/auto/gift/surprise' 
$ pwd | sed 's,^\(.*/\)\?\([^/]*\),\1,'
'/home/auto/gift/'

2 个答案:

答案 0 :(得分:6)

我认为最好使用cut

$ echo "/home/auto/gift/surpris" | cut -d/ -f1-3
/home/auto
$ echo "/home/auto/gift/surpris/bla/bla" | cut -d/ -f1-3
/home/auto

请注意cut -d/ -f1-3表示:根据分隔符/剥离字符串,然后从第1部分到第3部分进行打印。

awk

$ echo "/home/auto/gift/surpris" | awk -F/ 'OFS="/" {print $1,$2,$3}'
/home/auto
$ echo "/home/auto/gift/surpris/bla/bla" | awk -F/ 'OFS="/" {print $1,$2,$3}'
/home/auto

答案 1 :(得分:3)

您可以使用参数替换,即POSIX定义:

$ s="/home/auto/gift/surprise"
$ echo ${s%/*/*}
/home/auto