如何在PowerShell中用replace巧妙地替换字符串
2015-06-14 23:30
513 查看
我相信几乎所有人都会使用replace方法去替换一个字符串值,所以这里的文章标题我特地写了“巧妙地”,为什么说是巧妙地呢,因为replace方法所具备的替换能力绝对不是简单的添加一个原始值和替换值那么简单,一起跟着我这篇文章来看一下它还有哪些玩法吧:
我有一个字符串"Hello Anders",我想将这个字符串的Hello替换为Hi,所以结果为"Hi Anders",我们所有人肯定都会像下面这样做,一点都没错:
让我们一起再看一个例子,如下例子很明显我是想把[Hello]替换为Hi,可是却得到了出乎意料的结果:
当然,很多时候我们未必能清楚的知道每个正则表达式符号,所以你根本不可能像上面这样子手动的去告诉PowerShell哪些是正则表达式符号,然后不要去做解析。所以你可以更直接的使用下面的方法,直接不规避正则表达式解析而去做一个替换:
我有一个字符串"Hello Anders",我想将这个字符串的Hello替换为Hi,所以结果为"Hi Anders",我们所有人肯定都会像下面这样做,一点都没错:
PS C:\Users\Administrator> "Hello Anders".Replace("Hello","Hi") Hi Anders如果我们想要把这两个单词颠倒一下前后顺序应该怎么办呢?可以这样:
PS C:\Users\Administrator> "Hello Anders" -Replace '(.*) (.*)','$2 $1' Anders Hello在这里,细心的朋友可能发现了我们用了-replace而不是replace(),它们的作用其实是一样的,但是又有点不一样,因为-replace比replace()更加的具备灵活性,-replace可以做一个正则表达式的替换匹配。这也就是为什么如上例子中,我们用了正则表达式,来替换两个单词的顺序,为了不让PowerShell做$2,$1的直接解析,这里我们用单引号将它们放在一起。
让我们一起再看一个例子,如下例子很明显我是想把[Hello]替换为Hi,可是却得到了出乎意料的结果:
PS C:\Users\Administrator> "[Hello] Anders" -Replace '[Hello]','Hi' [HiHiHiHiHi] AndHirs正如我们之前提到的,-replace是一个正则表达式的匹配参数,所以在这里"[","]"方括号被以正则表达式的方法解析替换了Hi,输出了非我们想要的结果。所以我们要稍加做些修改才行,像这样:
PS C:\Users\Administrator> "[Hello] Anders" -Replace '\[Hello\]','Hi' Hi Anders这样就告诉了PowerShell,不要去以正则表达式解析,我们加上了"\"去说明,最后我们得到了正确的结果。
当然,很多时候我们未必能清楚的知道每个正则表达式符号,所以你根本不可能像上面这样子手动的去告诉PowerShell哪些是正则表达式符号,然后不要去做解析。所以你可以更直接的使用下面的方法,直接不规避正则表达式解析而去做一个替换:
PS C:\Users\Administrator> "[Hello] Anders" -Replace ([Regex]::Escape("[Hello]")),"Hi" Hi Anders
相关文章推荐
- shell删除指定日期之前修改过的文件
- 使用Xshell连接Ubuntu
- adb shell screenrecord /sdcard/myscreenrecord.mp4 录视频
- PowerShell
- Linux下执行Shell脚本
- shell学习十四天----使用cut选定字段
- shell学习十三天----sed案例分析
- Xshell远程连接Ubuntu
- bash array
- 最全xshell实用经典 附件
- bash调试经验
- npm should be run outside of the node repl, in your normal shell
- 一个Linux中用于监控的简易shell脚本
- linux shell之sed
- linux shell在while中用read从键盘输入
- Android adb shell命令
- SHELL中常用特殊变量
- shell脚本获得本机ip地址
- shell学习十二天----行与字符串
- shell学习第十一天----sed正则的精确控制