Shan

Shell中"# ## % %%"的用法
最近看到有用# ## % %%来对shell内变量进行文本处理的,所以从网上找了些资料,实践了一下。在此记录实验结...
扫描右侧二维码阅读全文
14
2017/12

Shell中"# ## % %%"的用法

最近看到有用# ## % %%来对shell内变量进行文本处理的,所以从网上找了些资料,实践了一下。在此记录实验结果以及总结使用方法。

删除功能

test=12/345/6789/101112

# echo $test
12/345/6789/101112

# echo ${test#*345/}
6789/101112
"#"表示删除第一个"/"及其左边的字符串"12/345",即删除"12/345/"

# echo ${test##*/}
101112
"##"表示删除最后一个"/"及其左边的字符串"12/345/6789",即删除"12/345/6789"

# echo ${test%/*}
12/345/6789
"%"表示删除最后一个"/"及其右边的字符串"101112",即删除"/101112"

# echo ${test%%/*}
12
"%%"表示删除第一个"/"及其右边的字符串"345/6789/101112",即删除"/345/6789/101112"

# echo ${test:0:6}
12/345
${test:0:6} 提取最左边开始的6个字节

# echo ${test:1:6}
2/345/
${test:1:6} 提取从第一个字节开始的6个字节

替换功能

test=12/345/6789/101112/345
# echo ${test/345/543}
12/543/6789/101112/345

两条斜线中间的内容是旧字符串,后面是新字符串,和使用vim替换时的顺序相同
并且只替换匹配的第一个内容

# echo ${test//345/543}
12/543/6789/101112/543

如果两个斜线中间是"/旧字符串",那么就变成所有匹配内容都被替换(全局)

记忆方法

  • '#'是删掉左边,'%'是删掉右边 (可以结合键盘上的位置来记忆:'#' 在 '$' 左边,而'%' 在 '$' 右边)
  • 单一符号是最小匹配,两个符号是全局匹配

鸟哥书上的说明

变量设置方式 说明
${变量#关键字} 若变量内容从头开始的数据符合"关键字",则将符合的最短数据删除
${变量##关键字} 若变量内容从头开始的数据符合"关键字",则将符合的最长数据删除
${变量%关键字} 若变量内容从后向前开始的数据符合"关键字",则将符合的最短数据删除
${变量%%关键字} 若变量内容从后向前开始的数据符合"关键字",则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合"旧字符串",则第一个旧字符串被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合"旧字符串",则全部旧字符串被新字符串替换
Last modification:July 15th, 2018 at 10:45 am

Leave a Comment