Loading... <img class=" lazyloaded" title="1481034980961904.jpg" src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161206/1481034980961904.jpg" alt="bash.jpg" data-src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161206/1481034980961904.jpg" style=""> 上一篇文章中,我们提到了shell中常用的字符串处理操作,我们来回顾一下 一、获取变量的长度(字符串长度)。 二、对变量值进行截取(截取字符串)。 三、替换变量值中的某段字符。 四、删除变量值中的某段字符。 五、对变量值进行大小写转换。 六、当变量值为空时,对变量进行一些操作。 上篇文章中,我们已经总结了怎样获取变量长度,以及怎样对变量值进行截取,这篇文章中我们就来总结一下,怎样删除变量值中的字符串,以及怎样替换变量值中的字符串。 <h2 id="wznav_0">替换变量中的字符串</h2> 假如,我们想要把字符串”www.zsythink.net”中的”www”替换成”linux”,我们该怎么办呢?方法有很多种,不过此处,我们是来讨论操作变量的方法的,所以我们不考虑其他方法,我们来看一个替换变量中字符的示例,示例如下 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_1.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_1.png" style=""> 上例表示,将website变量中的www替换成linux,就是这么简单,但是需要注意,上例中的写法,只能替换字符串中第一个遇到的”www”,如果字符串中包含多个”www”,只有第一个”www”会被替换,其他”www”不会被替换,示例如下 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_2.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_2.png" style=""> 如果我们想要将字符串中的所有www都替换成linux,则可以使用如下语法,示例如下 <img class="lazyload" src="https://www.zsythink.net/wp-content/themes/zibll/img/thumbnail-lg.svg" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_3.png" style=""> 除了上述两种方法能够替换变量中的字符串,其实还有两种方法,不过这两种方法针对性比较强,一种是针对行首的字符串进行替换,另一种是针对行尾的字符串进行替换,示例如下 <img class="lazyload" src="https://www.zsythink.net/wp-content/themes/zibll/img/thumbnail-lg.svg" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_4.png" style=""> 没错,上图中的两个例子分别表示只替换行首的www,或者只替换行尾的www <h2 id="wznav_1">删除变量中的字符串</h2> 只要理解了怎样替换变量中的字符串,再来理解怎样删除变量中的字符串,简直不要太简单,因为它们的语法几乎是一样。 假如,我们想要将字符串”www.zsythink.net”中的第一个”.”替换成”@” ,可以使用如下语法 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_5.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_5.png" style=""> 刚才说过,删除字符串的语法比替换字符串的语法更简单,如果我们想要删除上述字符串中的第一个”.” 则可以使用如下方法 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_6.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_6.png" style=""> 语法的确更简单,其实就是将替换字符串语法中的替换部分省略了。 同理,在删除字符串也有多种方法。 比如,刚才的示例中,我们只删除了字符串中的第一个”.” ,如果我们想要删除字符串中的所有的”.” ,则可以使用如下语法 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_7.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_7.png" style=""> 聪明如你一定发现了,其实,删除字符串的语法是与替换字符串的语法其实是”对应的”。 那么综上所述,你应该已经可以推理出另外两种删除字符串的方法了。 没错,删除行首的某个字符串或者删除行尾的某个字符串的方法如下 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_8.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/090417_0923_8.png" style=""> 好了,关于替换字符串与删除字符串的常用操作示例就先到这里,为了方便回顾,我们将上述常用操作进行一下小结,在小结中,有一些特殊情况的示例,不要错过哦~~ <h2 id="wznav_2">小结</h2> <h3 id="wznav_3">删除字符串的操作</h3> 删除变量值中第一个遇到的指定字符串 语法:echo ${var/str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除变量值中第一个遇到的"@"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy@think@linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/@}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink@linux</span></div> </div> </div> </div> 删除变量值中所有的指定字符串 语法:echo ${var//str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中所有的"@"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy@think@linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//@}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythinklinux</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">刚才总结了两种语法</span></div> </div> <div class=""> <div><span class="enlighter-text">语法一:删除变量值中所有的指定字符串的语法为echo $</span><span class="enlighter-g1">{</span><span class="enlighter-text">va</span><span class="enlighter-c0">r//str}</span></div> </div> <div class=""> <div><span class="enlighter-text">语法二:删除变量值中第一个遇到的指定字符串的语法为echo $</span><span class="enlighter-g1">{</span><span class="enlighter-text">var/str</span><span class="enlighter-g1">}</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-text">如果,我们要删除字符串</span><span class="enlighter-s0">"/usr/local/chroot/usr/local"</span><span class="enlighter-text">中第一个遇到的</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,该怎么办呢?</span></div> </div> <div class=""> <div><span class="enlighter-text">正常情况下,我们会套用上述语法二,将语法二中的</span><span class="enlighter-s0">"str"</span><span class="enlighter-text">更改为</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,套用语法二后的命令如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//usr}</span></div> </div> <div class=""> <div><span class="enlighter-text">但是,套用语法二后的命令正好与上述语法一的语法结构相同,所以,本意是删除字符串中第一个遇到的</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,但是最终结果却变为删除字符串中所有的</span><span class="enlighter-s0">"usr"</span><span class="enlighter-text">,执行结果如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//usr}</span></div> </div> <div class=""> <div><span class="enlighter-c0">//local/chroot//local/nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">聪明如你一定想到了,这种情况需要对</span><span class="enlighter-s0">"/"</span><span class="enlighter-text">进行转义,示例如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\/usr}</span></div> </div> <div class=""> <div><span class="enlighter-text">/local/chroot/usr/local/nginx</span></div> </div> </div> </div> 删除变量值中位于行首的指定字符串 语法:echo ${var/#str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行首的"H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="H.H.H.H.H.H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/#H}</span></div> </div> <div class=""> <div><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.H</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行首的"#"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="#zsy#think#linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/##}</span></div> </div> <div class=""> <div><span class="enlighter-text">zs</span><span class="enlighter-c0">y#think#linux</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">参考之前的特殊情况,即可发现,由于删除字符串中行首的字符时需要使用语法</span><span class="enlighter-s0">"/#"</span><span class="enlighter-text">,所以如果想要删除字符串中第一个遇到的</span><span class="enlighter-s0">"#"</span><span class="enlighter-text">时,则不能使用</span><span class="enlighter-s0">"/#"</span><span class="enlighter-text">,需要对</span><span class="enlighter-s0">"#"</span><span class="enlighter-text">进行转义,示例如下,删除字符串中第一个遇到的</span><span class="enlighter-s0">"#"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy#think#linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\#}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythin</span><span class="enlighter-c0">k#linux</span></div> </div> </div> </div> 删除变量值中位于行尾的指定字符串 语法:echo ${var/%str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行尾的"H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="H.H.H.H.H.H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%H}</span></div> </div> <div class=""> <div><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.H.</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行尾的"%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy%think%linux%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%%}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsy%think%linux</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">参考之前的特殊情况,即可发现,由于删除字符串中行尾的字符时需要使用语法</span><span class="enlighter-s0">"/%"</span><span class="enlighter-text">,所以如果想要删除字符串中第一个遇到的</span><span class="enlighter-s0">"%"</span><span class="enlighter-text">时,则不能使用</span><span class="enlighter-s0">"/%"</span><span class="enlighter-text">,需要对</span><span class="enlighter-s0">"%"</span><span class="enlighter-text">进行转义</span></div> </div> <div class=""> <div><span class="enlighter-c0">#示例如下,删除字符串中第一个遇到的"%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy%think%linux%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\%}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink%linux%</span></div> </div> </div> </div> <h3 id="wznav_4">替换字符串的操作</h3> 将变量值中第一个遇到的str1替换成str2 语法:echo ${var/str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中第一个遇到的"w"替换成"abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="www"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/w/abc}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcww</span></div> </div> </div> </div> 将变量值中所有的str1替换成str2 语法:echo ${var//str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中所有"w"替换成"abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="www"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//w/abc}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcabcabc</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要进行转义,参考</span><span class="enlighter-s0">"删除字符串操作"</span><span class="enlighter-text">总结部分的特殊情况。</span></div> </div> </div> </div> 将变量值中位于行首的str1替换成str2 语法:echo ${var/#str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中位于行首的abc替换成123</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="abcdefabc666abc888abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/#abc/123}</span></div> </div> <div class=""> <div><span class="enlighter-text">123defabc666abc888abc</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要</span><span class="enlighter-c0">对#号进行转义,参考"删除字符串操作"总结部分的特殊情况。</span></div> </div> </div> </div> 将变量值中位于行尾的str1替换成str2 语法:echo ${var/%str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中位于行尾的abc替换成666</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="abcdefabc666abc888abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%abc/666}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcdefabc666abc888666</span></div> </div> </div> </div> 特殊情况 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要对%号进行转义,参考</span><span class="enlighter-s0">"删除字符串操作"</span><span class="enlighter-text">总结部分的特殊情况。</span></div> </div> </div> </div> 这篇文章就总结到这里,希望能够对你有所帮助~~ 转载自朱双印日志https://www.zsythink.net/archives/2296 Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏