Shell常用处理字符串方法(备查)

本文介绍Shell脚本中字符串的各种操作方法,包括构造、赋值、联接、求长、比较等,并提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、构造字符串

直接构造

1 STR_ZERO=hello
2 STR_FIRST= "i am a string"
3 STR_SECOND= 'success'


重复多次

01 #repeat the first parm($1) by $2 times
02 strRepeat()
03 {
04 local x= $2
05 if [ "$x" == "" ]; then
06 x=0
07 fi
08  
09 local STR_TEMP= ""
10 while [ $x -ge 1 ];
11 do
12 STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1" `
13 x=`expr $x - 1`
14 done
15 echo $STR_TEMP
16 }

 


举例:

1 STR_REPEAT=`strRepeat "$USER_NAME" 3`
2 echo "repeat = $STR_REPEAT"




二、赋值与拷贝

直接赋值
与构造字符串一样

1 USER_NAME=terry



从变量赋值

1 ALIASE_NAME=$USER_NAME




三、联接

直接联接两个字符串
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
使用printf可以进行更复杂的联接


四、求长

求字符数(char)

1 COUNT_CHAR=` echo "$STR_FIRST" | wc -m `
2 echo $COUNT_CHAR


求字节数(byte)

1 COUNT_BYTE=` echo "$STR_FIRST" | wc -c `
2 echo $COUNT_BYTE

 

求字数(word)

1 COUNT_WORD=` echo "$STR_FIRST" | wc -w `
2 echo $COUNT_WORD




五、比较

相等比较

1 str1 = str2


不等比较

1 str1 != str2


举例:

1 if [ "$USER_NAME" = "terry" ]; then
2 echo "I am terry"
3 fi



小于比较

1 #return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ];
1 then x=2 localTEMP=`printf "%s/n%s" "$1" "$2" ` local TEMP2=`( echo "$1" ; echo "$2" ) | sort ` if [ "$TEMP" = "$TEMP2" ];
1 then x=1 fi fi echo $x }




六、测试

判空

1 -z str

 

判非空

1 -n str



是否为数字

01 # return 0 if the string is num, otherwise 1
02 strIsNum()
03 {
04 local RET=1
05 if [ -n "$1" ]; then
06 local STR_TEMP=` echo "$1" | sed 's/[0-9]//g' `
07 if [ -z "$STR_TEMP" ]; then
08 RET=0 
09 fi
10 fi
11 echo $RET
12 }



举例:

1 if [ -n "$USER_NAME" ]; then
2 echo "my name is NOT empty"
3 fi
4  
5 echo `strIsNum "9980" `



七、分割

以符号+为准,将字符分割为左右两部分
使用sed
举例:
命令 date --rfc-3339 seconds 的输出为
2007-04-14 15:09:47+08:00
取其+左边的部分
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
输出为
2007-04-14 15:09:47
取+右边的部分
date --rfc-3339 seconds | sed 's/.*+//g'
输出为
08:00

以空格为分割符的字符串分割
使用awk
举例:
STR_FRUIT="Banana 0.89 100"
取第3字段
echo $STR_FRUIT | awk '{ print $3; }'


八、子字符串

字符串1是否为字符串2的子字符串

1 # return 0 is $1 is substring of $2, otherwise 1
2 strIsSubstring()
3 {
4 local x=1
5 case "$2" in
6 * $1 *) x=0;;
7 esac
8 echo $x
9 }

 

一、Linux shell 截取字符变量的前8位,有方法如下:

1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘/(.//).*’
6.echo $a|dd bs=1 count=8 2>/dev/null


二、按指定的字符串截取

1、第一种方法:

${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要

例子:

1 $ MYVAR=foodforthought.jpg
2 $ echo ${MYVAR ##*fo}
3 rthought.jpg
4 $ echo ${MYVAR #*fo}
5 odforthought.jpg


2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。

可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

1 $ EXCLAIM=cowabunga
2 $ echo ${EXCLAIM:0:3}
3 cow
4 $ echo ${EXCLAIM:3:7}
5 abunga



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

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

1 ls -al | cut -d “.” -f2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值