免费注册 查看新帖 |

  平台 论坛 博客 文库
12下一页
最近访问板块
查看: 127291 | 回复: 14

[学习共享] 魔教妖人30行powershell代码,尽解“掐头,去尾,取中间”问题 [复制链接]

      论坛徽章:
      0
      1 [收藏(0)] [报告]
      发表于 2018-02-06 15:41 |只看该作者 |倒序浏览

      来源:虎扑 网址:http://www.mxy4grjo.cn/a/www.ytpp.com.cn/

      播报:

        •   青年员工一边认真听讲理论、牢记方法,一边提出疑问、虚心求解。第42分钟,津门虎队罗萨连续左右脚开弓远射,可惜一次偏出,一次击中门柱。超市、电影院、KTV等人员密集场所在安全出口、疏散通道处设置门禁系统时,要保证火灾时能向疏散方向直接开启,并应在显著位置设置安全出口标识和使用提示。

            在月牙泉边,她遇到了九色鹿幻化而成的少年敦煌守护神鹿鸣,还有丝路商人巴巴亚。项目是高质量发展的生命线。

            上赛季,汉兰效力于西班牙联赛,场均贡献分1篮板助攻的数据,作为欧洲最高水平的联赛,汉兰场均分的数据已经非常出色了。市科技局高新处二级调研员周明表示,我市围绕海洋科学装备、海洋运载装备、海洋油气开采以及新能源应用等领域,开展卡脖子关键技术攻关和应用示范,引导全社会不断突破产业发展重大技术难题。

            四、使用燃气的房间应打开门窗保持通风,做饭、烧水时要有人照看,避免汤水沸溢造成火灭漏气。张老师的讲解,将集邮文化与地方特色文化有机地相结合起来,让社区群众增长了对集邮文化的了解与认识,带大家感受到了集邮文化、书信文化。

          重点推荐: 爱的代价?法国女孩布兰奇被母亲囚禁25年,垃圾为伍蟑螂老鼠为伴 特别是在假期期间,很多商场为了营造节日气氛大量使用可燃易燃材料进行装修装饰,一旦发生火灾,燃烧迅猛,产生大量有毒烟气,严重威胁人员生命安全。租金下行压力有所缓解。

          	爱的代价?法国女孩布兰奇被母亲囚禁25年,垃圾为伍蟑螂老鼠为伴

          本帖最后由 本友会机友会摄友会 于 2019-05-20 11:03 编辑

          本人 原创文章。始于 2018-02-04 允许转载,但必须保留名字和出处,否则追究法律责任

          ps找算替.ps1,即powershell版的sed。
          是我根据这个找替原理,编写的查找替换实用工具软件。

          脚本下载地址:
          https://pan.baidu.com/s/1yuqUOhY9lEw65vJ-vceg4w
          里面有《ps找算替_v3_readme.txt》

                  歌曲有云,“你总是匹配头,匹配尾,独自一人匹配到天亮。。。”


          ==============================【第一章 前言】==============================

              掐头,去尾,过滤(保留)中间的问题,是我们写脚本最常遇到的。

          http://bbs.chinaunix.net/thread-4262197-1-1.html
          http://bbs.chinaunix.net/thread-4263954-1-1.html   尽解 掐头 去尾 的ps函数。
          http://bbs.chinaunix.net/thread-4264638-1-1.html
          http://bbs.chinaunix.net/thread-4291758-1-1.html
          http://bbs.chinaunix.net/thread-4291881-1-1.html
          http://bbs.chinaunix.net/thread-4251010-1-1.html

          ==============================【第二章 代码】==============================

          我写过一段ps代码,主要代码不到30行。注释不算行数,echo类语句不算行数。花括号不算行数。

          只需要简单修改,任意(保留),(除掉),【头】【尾】【中间】。可以尽解所有【掐头】【去尾】【取中间】的问题。
          真正做到了代码复用,无需学习正则。代码如下:



          1. $文件存入大字符串 = Get-Content -LiteralPath 'a:\pscode\0\掐头去尾取中间\20170726.txt' -raw
          2. #$文件存入大字符串 = Get-Content -raw -LiteralPath $args[0]
          3. $已经找到了匹配头 = $false
          4. $从偏移量开始 = 0
          5. $匹配头字符串 = "Channel:北京卫视`r`n"
          6. $匹配尾字符串 = 'Channel:'
          7. #$匹配身字符串 = 'ccc'

          8. do
          9. {
          10.     if ($已经找到了匹配头 -eq $false)
          11.     {
          12.         $tmp匹配头位置 = $文件存入大字符串.IndexOf($匹配头字符串,$从偏移量开始)
          13.         if ($tmp匹配头位置 -eq -1)
          14.         {
          15.             Write-Host '找不到头了'
          16.             exit 1
          17.         }
          18.         else
          19.         {
          20.             $匹配头位置 = $tmp匹配头位置
          21.             $已经找到了匹配头 = $true
          22.             $从偏移量开始 = $匹配头位置 + 1
          23.         }
          24.     }
          25.     else
          26.     {
          27.         $tmp匹配尾位置 = $文件存入大字符串.IndexOf($匹配尾字符串,$从偏移量开始)
          28.         if ($tmp匹配尾位置 -eq -1)
          29.         {
          30.             Write-Host '找不到尾了'
          31.             exit 2
          32.         }
          33.         else
          34.         {
          35.             $匹配尾位置 = $tmp匹配尾位置
          36.             [string]$匹配出的字符串 = $文件存入大字符串.Substring($匹配头位置,($匹配尾位置 - $匹配头位置))
          37.             #            if (  $匹配出的字符串.Contains($匹配身字符串)  ) #区分大小写
          38.             #            {
          39.             Write-Host $匹配出的字符串
          40.             #            }
          41.             $已经找到了匹配头 = $false
          42.             $从偏移量开始 = $匹配尾位置 + 1
          43.         }
          44.     }
          45. }
          46. while ($从偏移量开始 -lt $文件存入大字符串.Length)
          47. Write-Host '正常结束'
          复制代码


          ==============================【第三章 讲解重要!】==============================

          下面我来讲解下我的代码:
          整个代码块很简单:
          do
          {
              if ($已经找到了匹配头 -eq $false)  {找头代码}
              else {找尾代码}
          }
          while (从0到文件尾)

          1do-while循环,遍历整个字符串,文件。
          2找完头,就找尾。如果不需要找尾,就只用找头代码。即找头,找头,找头。  ;)
          3在【头尾匹配】情况中,头尾都找到了,就可以,任意(保留),(除掉),【头】【尾】【中间】。
          4在【头头匹配】情况中,两个头都找到了,也可以,任意(保留),(除掉),【头】【尾】【中间】。
          5可以通过简单修改,如在循环,递归中,添加计数等。
          6取到的部分,可以通过循环,递归,再取。
          7匹配尾,是匹配头后面第一个。如果想要最后一个,应该用lastindexof替换indexof,即【$tmp匹配尾位置 = $文件存入大字符串.LastIndexOf($匹配尾字符串,$从偏移量开始)】
          8代码虽然不是特别简短,但30行,代码清晰,猪能懂,傻能改!一劳永逸。万用。尽解头尾中间问题。

          9作为对比:
          9.1 awk,sed正则难。
          9.2 每一个类似的问题,awk,sed都总要重写代码。代码无法复用。虽然这代码比30行短。
          9.3 代码无法复用。意味着,自己写过的代码,留着也无用,对吧。
          9.4 代码差别太大。意味着,半年后温习自己写过的代码,陌生了,重新理解,对吧。

          10代码的原理,和正则类似,相当于打散的正则,更方便控制。

          11此代码的性能:
          一次读取所有字符串。不适合于太大的文本。对于大文本,只需要简单修改脚本代码。
          11.1大文件,请修改代码第一行。使用.net文件流StreamReader,一行行读取文本,来达到最佳性能。
          11.2匹配过程中产生的,临时字符串。使用.net的内存字符串stringbuilder,来达到最佳性能。


          ==============================【第四章 结论】==============================
          如果说,重新造轮,是造新【酒瓶】的话。

          shell+awk+sed:
          我总是造新瓶,每个瓶子绝不重样。然后用新酒瓶装酒。


          powershell:
          收酒瓶子嘞,我总是:
          1克隆旧瓶,成为新瓶。
          2给新瓶传入参数。简单调整新瓶长、宽、高、形状、颜色、等参数。
          3然后装新酒。


          当然还是用旧瓶克隆简单,对吧。

          什么?
          旧瓶不如新瓶好?不如新瓶干净?啤酒厂都是刷洗旧瓶的,别告诉我你没喝过【600ml绿玻璃瓶啤酒】。

          即便新瓶,也还是用的旧玻璃。正则还不是10年前的旧的?

          ==============================【第五章 歌曲】==============================

          最后,献给大家一周歌: 《你总是匹配头》

          《你总是心太软》在线伴奏:
          http://play.baidu.com/?__m=mboxC ... =704086&__o=/search||songListIcon&fr=ps||www.baidu.com&__s=心太软 伴奏#

          ---------------------

          你总是【匹配头】,【匹配尾】,
          独自一个人,匹配到天亮,
          你无怨无悔,的用正则匹配,
          我知道你,根本已经烦躁。

          ---------------------

          你总是【造新轮】,【造新瓶】,
          把所有脚本都自己扛  昂~~~
          正则总是简单,学好太难,
          不懂【贪婪】,就别再勉强 扬~~~

          ---------------------

          夜深了你还不想睡
          你还在想着他吗
          你这样痴情到底累不累
          明知他不会回来安慰

          只不过,想好好,写一个过滤,
          可惜它,无法给你满分(正则)
          多余的牺牲,他不懂心疼
          你应该不会只想,做个好人

          喔 几天没写,就已经忘了吧(正则)
          该放就放,再想也没有用,
          傻傻等待,也不会记起来,
          你总该为自己,想想未来

          ---------------------

          你总是【匹配头】,【匹配尾】,
          独自一个人,匹配到天亮,
          你要是会了,我30行代码,
          它能让你,从根本变的更强。

          ---------------------

          你总是【造新轮】,【造新瓶】,
          把所有脚本都自己扛  昂~~~
          【旧轮】总是简单,【新轮】太难,
          30行代码,学会了,就会变强 ~~~
          30行代码,你学了,就变得更强 ~~~




          “你总是匹配头,匹配尾,独自一人匹配到天亮。。。”

          以后遇到类似问题,想想这首歌词即可。

          ---------完------------



          论坛徽章:
          145
          2 [报告]
          发表于 2018-02-06 15:56 |只看该作者
          好害怕....追究法律责任

          半年过去了......没看什么人学会了...

          http://bbs.chinaunix.net/thread-4263951-1-1.html

          论坛徽章:
          6
          3 [报告]
          发表于 2018-02-09 19:07 |只看该作者
          回复 2# jason680

          半年过去了......没看什么人学会了...
          大师兄sunzhiguoluv学不会, 退隐江湖.
          二师兄dorodaloo也学不会, 愤而投入其他门派

          没人学会

          论坛徽章:
          6
          4 [报告]
          发表于 2018-02-09 19:20 |只看该作者
          只能鼓励一些没头没脑的小白, 投入ps的学习,
          由内部瓦解 魔教

          论坛徽章:
          6
          5 [报告]
          发表于 2018-02-10 09:42 |只看该作者
          对壳语言这样的坑还是很有兴趣的,待时机一至,自主填之

          也配个歌词:

            就向前闯
            用力飞翔
            飞过每个熟悉地方
            灰色土壤
            你的泪光
            残缺不堪的城墙
            倔强脸庞
            褪去迷惘
            信念象繁花一样在远处绽放
            时间的形状
            象天空刺眼逆光

          论坛徽章:
          24
          6 [报告]
          发表于 2018-02-12 15:38 |只看该作者
          本帖最后由 chengchow 于 2018-02-12 15:40 编辑


          别理楼上的
          不明觉厉,代码就要写的让人看不懂,这样才能现的我们很厉害!

          顺便问下PS是什么,photoshop吗?

          论坛徽章:
          6
          7 [报告]
          发表于 2018-02-12 19:11 |只看该作者
          回复 6# chengchow

          问下PS是什么
          Please don't Stop  

          论坛徽章:
          145
          8 [报告]
          发表于 2018-02-13 10:57 |只看该作者
          PowerShell打不开,打开就说已停止工作。

          论坛徽章:
          6
          9 [报告]
          发表于 2018-02-14 10:11 |只看该作者
          为什么打不开,为什么停止工作,因为它不由自主

                                  -论壳语言的自我修养

          论坛徽章:
          6
          10 [报告]
          发表于 2018-02-15 08:14 |只看该作者
          壳语言的自主过程,就是自身发展强大的过程。

          问题在发展的过程中解决,所以遇到问题,自主是根本解决之道
          12下一页
          返回列表
          雷锋28网 雷锋28网 程序设计 Shell 魔教妖人30行powershell代码,尽解“掐头,去尾,取中间 ...
          您需要登录后才可以回帖 登录 | 注册

          本版积分规则 发表回复

            

          北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
          未成年举报专区
          中国互联网协会会员  联系我们:huangweiwei@itpub.net
          感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

          清除 Cookies - ChinaUnix - Archiver - WAP - TOP
            
          分享:

          收藏

          --

          --

          无障碍浏览