Shell:字符串的分割截取

31 篇文章 2 订阅

Linux 分割字符串(shell substr)  

在shell中如果遇到要截取字符串的情况,可以调用awk中的substr来实现,但事实上,原来shell中本身就支持这种用法。

一、截取字符变量的前n位(如:n=8),有5种方法如下:

expr substr "$a" 1 8

echo $a|awk '{print substr(,1,8)}'

echo $a|cut -c1-8

expr $a : '\(.\\).*'

echo $a|dd bs=1 count=8 2>/dev/null

二、截取第m个到第n个字符的字符串区间(如m=3,n=6)

export str="123456789"
echo ${str:3:(6-3)}
456

从以上第二个表达式可以看出这个用法,即:${str:3:(6-3)}。可以归纳为:${str:begin:len},且支持数学表达式,如:6-3。

三、按指定的字符串截取

1、第一种方法:

从左向右截取最后一个string后的字符串

result=${varible##*string} 

从左向右截取第一个string后的字符串

result=${varible#*string}

从右向左截取最后一个string后的字符串

result=${varible%%string*}

从右向左截取第一个string后的字符串

result=${varible%string*}

(以上的“ * ”只是一个通配符,可以不要)

例:

MYVAR='foodforthought.jpg'
echo ${MYVAR##*fo}
rthought.jpg
echo ${MYVAR#*fo}
odforthought.jpg

2、第二种方法:

截取变量varible从n1到n2之间的字符串

${varible:n1:n2}

可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。

EXCLAIM=cowabunga
echo ${EXCLAIM:0:3}
cow
echo ${EXCLAIM:3:7}
abunga

这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。

四、按照指定要求分割,比如获取后缀名

ls -al | cut -d "." -f2

既然提到了cut命令,就给出一篇文档吧:

cut命令是用来剪下文本文件里的数据,文本文件可以是字段类型或是字符类型。下面给出应用实例:
    /> cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ... ...
    /> cut -d : -f 1,5 /etc/passwd     #-d后面的冒号表示字段之间的分隔符,-f表示取分割后的哪些字段
    root:root                                 #这里取出的是第一个和第五个字段。
    bin:bin
    daemon:daemon
    adm:adm
    ... ...
    /> cut -d: -f 3- /etc/passwd       #从第三个字段开始显示,直到最后一个字段。
    0:0:root:/root:/bin/bash
    1:1:bin:/bin:/sbin/nologin
    2:2:daemon:/sbin:/sbin/nologin
    3:4:adm:/var/adm:/sbin/nologin
    4:7:lp:/var/spool/lpd:/sbin/nologin
    ... ...    
    这里需要进一步说明的是,使用cut命令还可以剪切以字符数量为标量的部分字符,该功能通过-c选项实现,其不能与-d选项共存。
    /> cut -c 1-4 /etc/passwd          #取每行的前1-4个字符。
    /> cut -c-4 /etc/passwd            #取每行的前4个字符。 
    root
    bin:
    daem
    adm:
    ... ...
    /> cut -c4- /etc/passwd            #取每行的第4个到最后字符。
    t:x:0:0:root:/root:/bin/bash
    :x:1:1:bin:/bin:/sbin/nologin
    mon:x:2:2:daemon:/sbin:/sbin/nologin
    :x:3:4:adm:/var/adm:/sbin/nologin
    ... ...
    /> cut -c1,4 /etc/passwd           #取每行的第一个和第四个字符。
    rt
    b:
    dm
    a:
    ... ...
    /> cut -c1-4,5 /etc/passwd        #取每行的1-4和第5个字符。
    root:
    bin:x
    daemo
    adm:x
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值