shell之字符串操作

这篇博客介绍了Shell脚本中对字符串的各种操作,包括判断字符串属性、计算长度、字符串数组转换以及取子串、查询子串、替换子串、插入子串、删除子串、子串比较和排序等常规操作。内容详细,适合初学者参考。

在使用脚本的时候,字符串是我们经常用的对象,还经常会用到查找,替换,删减,比较等等操作。本人稍作整理,希望能对新人有所帮助


1.判断字符串的属性

  一般用到的也就是  是不是数字,书不是字母等等

// 数字或者数字组合(能够返回结果,即程序退出状态是0,说明属于这种类型,反之不然)
$ i=5;j=9423483247234;
$ echo $i | grep [0-9]*
5
$ echo $j | grep [0-9]*
9423483247234
$ echo $j | grep [0-9]* > /dev/null
0
// 字符组合(小写字母、大写字母、两者的组合)
$ c= "A" ; d= "mynameisyfc" ; e= "whatyourname"
$ echo $c | grep [A-Z]
A
$ echo $d | grep "[a-z]*"
mynameisyfc
$ echo $e | grep "[a-zA-Z]*"
whatyourname
// 字母和数字的组合
$ ic= "432fwfwefeFWEwefwef"
$ echo $ic | grep "[0-9a-zA-Z]*"
432fwfwefeFWEwefwef
// 空格或者Tab键等
$ echo " " | grep " "  
$ echo -e "\t" | grep "[[:space:]]" #[[:space:]]会同时匹配空格和TAB键 
$ echo -e " \t" | grep "[[:space:]]" 
$ echo -e "\t" | grep "<tab>" #<tab>为在键盘上按
### Shell 脚本中的字符串操作方法 #### 使用 `grep` 查找子字符串 可以通过 `grep` 命令来判断一个字符串是否包含另一个子字符串。以下是具体实现方式: ```bash result=$(echo "$strA" | grep "${strB}") if [[ "$result" != "" ]]; then echo "包含" else echo "不包含" fi ``` 这种方法利用了管道符将 `$strA` 的内容传递给 `grep`,并通过条件语句检测返回的结果是否为空[^1]。 #### 利用正则表达式匹配 另一种更为简洁的方式是通过 Bash 的内置支持——正则表达式匹配: ```bash if [[ $strA =~ $strB ]]; then echo "包含" else echo "不包含" fi ``` 这种方式无需调用外部工具即可完成相同功能,效率更高且代码更加紧凑[^1]。 #### 删除字符串中的特定字符 如果需要移除字符串中的某些指定字符(如空格),可以采用多种方法: - **使用参数扩展** ```bash var="get the length of me" echo ${var// /} ``` - **借助 `awk` 工具** ```bash echo "$var" | awk '{gsub(" ","",$0); printf("%s\n", $0);} ' ``` - **运用 `sed` 替换命令** ```bash echo "$var" | sed 's/ //g' ``` - **应用 `tr` 命令** ```bash echo "$var" | tr -d " " ``` 以上四种方案均可有效去除目标字符串内的空白字符[^2]。 #### 字符串截取技术 对于从较长的字符串中提取部分片段的操作需求,Shell 提供了几种实用手段: - **按字节位置切割** ```bash echo "acbdef" | cut -b 2 ``` - **基于字符索引范围选取** ```bash echo "acbdef" | cut -c 1-3 ``` - **自定义分隔符获取字段值** 当面对结构化数据时,比如由冒号分割的内容,则可如下操作: ```bash echo "a:b:c" | cut -d: -f 2 ``` 此例展示了如何读取出被冒号区分开来的第二项数据[^3]。 ### 总结 上述列举了一些常见的 Shell 中针对字符串的基础处理技巧,包括但不限于查找、替换以及裁剪等方面的应用实例。每一种都有其适用场景,在实际开发过程中可以根据具体情况灵活选用最合适的解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

six2me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值