字符串处理总结
截取
#* 和 ##*
#删除从左到右,第一个匹配字符串为止。相当于left
##删除从左到右,最后一个匹配字符串为止
%*和%%*
%删除从右到左,第一个匹配字符串为止。相当于right
%%删除从右到左,最后一个匹配字符串为止。
${:}或者${::}
${str:start}
${str:start:len} 正数从左开始,负数从右开始
${str//,/ } 意思是讲,替换成空格缺点是如果分隔的字符串含有空格,这个分割就会错误。
下面的方法,可解决上面的问题。
cut -c或者cut -d ---从1开始而不是从0开始
`echo ${val} |cut -c 2-9` 意思是第2字符开始到第9个字符
`echo ${val} |cut -d "x" -f3` 意思是按照X符号分割,取第3项
还有一种方法,更改IFS的默认值。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。
OLD_IFS=”$IFS”
IFS=”,”
arr=($a)
IFS=”$OLD_IFS”
求长度
方法1: 使用wc -L命令
echo "abc" |wc -L
方法2: expr length string
使用expr length可以获取string的长度
方法3: 通过awk+length的方式获取字符串长度
echo “abc”|awk '{print length($0)}'
方法4: 通过echo ${#str}的方式(注意:str是变量名)
各种括号的作用(),(()),[],[[]],{}
https://www.cnblogs.com/qlqwjy/p/8684630.html
字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
https://www.cnblogs.com/gaochsh/p/6901809.html
while IFS=: read name passwd uid gid fullname ignore
do
echo "$name ($fullname)"
done < /etc/passwd
通常见到的while语句都是while read line.这个例子里在while后面加了IFS=:这样的设置。这样就把IFS的变动放到了循环里,而不用改变原始的$IFS