shell 变量: 字符串替换

替换

格式: ${parameter/pattern/string}


${parameter/pattern/string}
${parameter//pattern/string}

说明

pattern的扩展和filename expansion一样;
parameter则是直接替换; 并且pattern最长匹配的字符串被替换成string; 即贪婪模式;
pattern正则后续介绍;
/pattern表示所有匹配都替换; 贪婪模式;
pattern第一个匹配替换
#patternpattern开头才替换;
%patternpattern结尾才替换;
string为空表示删除匹配;
shopt -s nocasematch不区分大小写;
parameter@, *, 则对所有的函数参数挨个处理; 结果是list类型;
var[@], var[*]同理, 对每个参数替换, 返回仍是list;

匹配大小写

格式

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

说明

功能是将paramter中匹配pattern的首字母大写或小写;
pattern的正则类似file
^大写, ,小写;
单个^,只匹配一个就终止, 两个则是匹配所有;
同样@*会对每个都进行处理并返回对应类型;

正则

说明

非特殊字符表示本身, 特殊字符表示集合; \则转义, 特殊符号将变成本身;

*

任意字符字符串, 包括空字符;
*不匹配/, **匹配/; **/仅匹配文件夹;

?

匹配任意单个字符

[...]

字符表示本身
a-z, -表示区间; 包含;
!^表示对罗列集合取反;
集合和所在地区有关, 因为地区不同, 范围内的字符不同, 比如a-z表示小写的az, 共26个字符, 而有的国家则是52, 因为他们的排列是aAbBcC...Zz这种;

特殊集合[:class:]

# 后面两种格式少见, 有得甚至不识别;
[:class:] [=class=] [.class.]
# class 可以下面的任意一个
alnum
alpha
ascii
blank
cntrl
digit
graph
lower
print
punct
space
upper
word
xdigit

复合, shopt -s extglob打开才能使用

可以多个正则; | 分隔;

?(pattern-list)
Matches zero or one occurrence of the given patterns.
*(pattern-list)
Matches zero or more occurrences of the given patterns.
+(pattern-list)
Matches one or more occurrences of the given patterns.
@(pattern-list)
Matches one of the given patterns.
!(pattern-list)
Matches anything except one of the given patterns.

注: 不好用建议用sed正则替换更优; 或者python re;

https://www.gnu.org/software/sed/manual/
https://docs.python.org/3.8/library/re.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值