shell中分割字符串之后怎么取得最后一个东西的值?如果可以的话,怎么将分割后的结果保存到一个数组中?
比方说,我有一个路径path="/home/work/hdfs/diff",我想用反斜杠"/"分割字符串,取得最后一个目录的名字diff,我应该怎么做?首先,我是不知道这...
比方说,我有一个路径path="/home/work/hdfs/diff",我想用反斜杠"/"分割字符串,取得最后一个目录的名字diff,我应该怎么做?首先,我是不知道这个目录里面有几个"/"的,也就是说,我不知道分割完之后“diff”是在第几列上。否则的话一个awk命令直接搞定了。
不知道我说明白了没,请shell达人帮忙解答一下哈~ 展开
不知道我说明白了没,请shell达人帮忙解答一下哈~ 展开
4个回答
展开全部
1、首先在shell中,定义一个字符串变量,例:str='bbc123uu789'。
2、使用echo输出变量$str的值,例:#注释:shell中定义变量不需要使用$符号,使用变量的时候需要使用$符号echo $str。
3、使用sed指令,对变量进行处理,例:echo $str|sed 's/./&\+/g'#注释:sed是文本流的处理指令,不会对原文件的内容造成破坏,同时sed支持正则表达式,所以使用起来特别强大#经过以上简单处理之后,字符之间被+符号分隔开来了。
4、sed指令本身并不会原文本造成破坏,所以,再次输出变量$str,值并未改变。
5、使用空格对字符进行分隔,只需要指定sed语法种的符号即可,例:echo $str|sed 's/./& /g'#注释:掌握了这个,想使用什么符号分隔都可以,在&符号后指定就可以了。
6、扩展一下,按照三个字符一组,对字符串进行分隔,例:echo $str|sed 's/.../& /g'。
展开全部
这个问题很简单呀,直接使用命令basename获取即可。例如path="/home/work/hdfs/diff"获取diff的命令为:
basename $path
如果想获取/home/work/hdfs这部分内容,可使用命令:
basedir $path
basename $path
如果想获取/home/work/hdfs这部分内容,可使用命令:
basedir $path
追问
我只是举了这么一个例子,并不是说我要解决的问题就是路径的问题。比如这样的问题应该怎么处理:a=“1:2:3:4:5:6:7”,我想得到最后一列的“7”,怎么做?我事先并不知道这里有几列。
如果在perl中,可以使用@t=split /:/,$a这样来做,shell中有类似的做法么?
谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有很多命令都可以实现你要求的功能,比如
awk:
echo "1:3:5" | awk -F ":" '{print $NF}'
sed:
echo "1:3:5" | sed 's/.*:\([^:]*\)$/\1/'
awk:
echo "1:3:5" | awk -F ":" '{print $NF}'
sed:
echo "1:3:5" | sed 's/.*:\([^:]*\)$/\1/'
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string="1:2:3:4:5:6:7"
array=(${string//:/ }) #创建数组
last_value=${array[${#array[*]}-1]} #获取最后一个元素
array=(${string//:/ }) #创建数组
last_value=${array[${#array[*]}-1]} #获取最后一个元素
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询