<ruby id="x69ha"><address id="x69ha"></address></ruby>
    1. <tbody id="x69ha"></tbody>

          1. <th id="x69ha"></th>
          2. <dd id="x69ha"><track id="x69ha"></track></dd>
            <rp id="x69ha"></rp>
              免费注册 查看新帖 |

            Chinaunix

              平台 论坛 博客 文库
            12下一页
            最近访问板块 发新帖
            查看: 43952 | 回复: 11
            打印 上一主题 下一主题

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

            论坛徽章:
            0
            跳转到指定楼层
            1 [收藏(0)] [报告]
            发表于 2018-02-06 15:41 |只看该作者 |倒序浏览
            本帖最后由 本友会机友会摄友会 于 2019-05-20 11:03 编辑

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

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

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

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


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

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

            http://www.245567157.cn/thread-4262197-1-1.html
            http://www.245567157.cn/thread-4263954-1-1.html   尽解 掐头 去尾 的ps函数。
            http://www.245567157.cn/thread-4264638-1-1.html
            http://www.245567157.cn/thread-4291758-1-1.html
            http://www.245567157.cn/thread-4291881-1-1.html
            http://www.245567157.cn/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行代码,你学了,就变得更强 ~~~




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

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

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



            论坛徽章:
            130
            技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
            2 [报告]
            发表于 2018-02-06 15:56 |只看该作者
            好害怕....追究法律责任

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

            http://www.245567157.cn/thread-4263951-1-1.html

            论坛徽章:
            6
            数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
            3 [报告]
            发表于 2018-02-09 19:07 |只看该作者
            回复 2# jason680

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

            没人学会

            论坛徽章:
            6
            数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
            4 [报告]
            发表于 2018-02-09 19:20 |只看该作者
            只能鼓励一些没头没脑的小白, 投入ps的学习,
            由内部瓦解 魔教

            论坛徽章:
            6
            2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
            5 [报告]
            发表于 2018-02-10 09:42 |只看该作者
            对壳语言这样的坑还是很有兴趣的,待时机一至,自主填之

            也配个歌词:

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

            论坛徽章:
            23
            申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:51
            6 [报告]
            发表于 2018-02-12 15:38 |只看该作者
            本帖最后由 chengchow 于 2018-02-12 15:40 编辑


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

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

            论坛徽章:
            6
            数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
            7 [报告]
            发表于 2018-02-12 19:11 |只看该作者
            回复 6# chengchow

            问下PS是什么
            Please don't Stop  

            论坛徽章:
            130
            技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
            8 [报告]
            发表于 2018-02-13 10:57 |只看该作者
            PowerShell打不开,打开就说已停止工作。

            论坛徽章:
            6
            2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
            9 [报告]
            发表于 2018-02-14 10:11 |只看该作者
            为什么打不开,为什么停止工作,因为它不由自主

                                    -论壳语言的自我修养

            论坛徽章:
            6
            2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
            10 [报告]
            发表于 2018-02-15 08:14 |只看该作者
            壳语言的自主过程,就是自身发展强大的过程。

            问题在发展的过程中解决,所以遇到问题,自主是根本解决之道
            您需要登录后才可以回帖 登录 | 注册

            本版积分规则 发表回复

            DTCC2020中国数据库技术大会 限时8.5折

            【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

            大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

            http://dtcc.it168.com


            大会官网>>
            2019香港一肖精选中特资料
              

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

            清除 Cookies - ChinaUnix - Archiver - WAP - TOP