<menu id="4oq46"><strong id="4oq46"></strong></menu>
  • <menu id="4oq46"><menu id="4oq46"></menu></menu><input id="4oq46"><tt id="4oq46"></tt></input>
  • <tt id="4oq46"><strong id="4oq46"></strong></tt>
    <menu id="4oq46"><strong id="4oq46"></strong></menu>
      免費注冊 查看新帖 |

    Chinaunix

      平臺 論壇 博客 文庫
    12下一頁
    最近訪問板塊 發新帖
    查看: 126331 | 回復: 14
    打印 上一主題 下一主題

    [學習共享] 魔教妖人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.cesargiobbi.com/thread-4262197-1-1.html
    http://www.cesargiobbi.com/thread-4263954-1-1.html   盡解 掐頭 去尾 的ps函數。
    http://www.cesargiobbi.com/thread-4264638-1-1.html
    http://www.cesargiobbi.com/thread-4291758-1-1.html
    http://www.cesargiobbi.com/thread-4291881-1-1.html
    http://www.cesargiobbi.com/thread-4251010-1-1.html

    ==============================【第二章 代碼】==============================

    我寫過一段ps代碼,主要代碼不到30行。注釋不算行數,echo類語句不算行數;ɡㄌ柌凰阈袛。

    只需要簡單修改,任意(保留),(除掉),【頭】【尾】【中間】?梢员M解所有【掐頭】【去尾】【取中間】的問題。
    真正做到了代碼復用,無需學習正則。代碼如下:



    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
    技術圖書徽章
日期: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.cesargiobbi.com/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 |只看該作者
    對殼語言這樣的坑還是很有興趣的,待時機一至,自主填之

    也配個歌詞:

      就向前闖
      用力飛翔
      飛過每個熟悉地方
      灰色土壤
      你的淚光
      殘缺不堪的城墻
      倔強臉龐
      褪去迷惘
      信念象繁花一樣在遠處綻放
      時間的形狀
      象天空刺眼逆光

    論壇徽章:
    24
    申猴
日期: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:5115-16賽季CBA聯賽之佛山
日期:2020-05-08 09:03:54
    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  

    論壇徽章:
    145
    技術圖書徽章
日期: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 |只看該作者
    殼語言的自主過程,就是自身發展強大的過程。

    問題在發展的過程中解決,所以遇到問題,自主是根本解決之道
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則 發表回復

      

    北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年舉報專區
    中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
    感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP
       日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站