sedsed 一個更好理解sed執行過程的工具


官網:http://aurelio.net/projects/sedsed/    這個上面好多學習的資料 嘿嘿 留着慢慢看

昨晚在看sed的具體執行過程,看到有hold space,pattern sapce,然后想看一下執行過程,就搜啊搜啊,搜到這個,以前就一直想有沒有一個指令能追蹤如何執行的

大概根據官網和自己的理解記錄一下,不過我覺得看官網的原文更好理解,如果文中有錯誤,希望能一起改正,嘿嘿

 

一:下載安裝sedsed,是用python寫的一個腳本文件
1) cd /bin
2) wget http://aurelio.net/projects/sedsed/sedsed-1.0 -O sedsed   -O表示以另一個文件名保存
3) chmod +x sedsed

 

二:sedsed的幾種模式               

          調試模式:它將會讀取你的腳本並且添加額外的命令(就是:前面的信息);當你執行的時候也可看到命令之間的數據流,揭示其sed內部緩沖區神奇的面紗。通俗點講就是把整個執行的過程顯示出來,和set -x差不多
          縮進模式:腳本將會被標准的格式格式化。以一種標准的格式輸出
          分詞模式:把你執行的sed命令分析出來
          網頁模式:你的腳本將被轉換成一個美觀的彩色的HTML格式,所有的命令和元素將會增強你的視覺樂趣
          有了sedsed,可以掌握任何的sed腳本,沒有任何秘密了,沒有更多隱藏的緩存。
三:簡單的幾個例子           
<1>:文本內容
cat email.txt 
user@abc.com
otheruser@ll.com
這里面有幾個參數選項:可以用 sedsed --help查看選項的意思          
            -d                      把調試模式打開                 
           HOLD:               HOLD SPACE的內容
           PATT:                PATTERN SPACE的內容
           COMM:              sed 執行的命令
           $:                     PATT與HOLD的結束符
           ...:                    不以任何標識符開頭的是最終輸出的結果
 
--hide=hold        意思是把hold space這個輸出以藏起來,因為在這個例子里是空的;這里需要對sed的pattern space和hold space要有理解
cat email.txt |sedsed -d --hide=hold 's/@.*//g'
PATT:user@abc.com$
COMM:s/@.*//g
PATT:user$
user
PATT:otheruser@ll.com$
COMM:s/@.*//g
PATT:otheruser$
otheruser

 

--hide=patt   就是把PATT:這個給隱藏起來,只會輸出HOLD與COMM    

cat email.txt |sedsed -d --hide=patt 's/@.*//g'
HOLD:$
COMM:s/@.*//g
HOLD:$
user
HOLD:$
COMM:s/@.*//g
HOLD:$
otheruser

 

 --hide=comm  就把COMM:隱藏,就只會輸出HOLD,PATT

cat email.txt |sedsed -d --hide=comm 's/@.*//g'
PATT:user@abc.com$
HOLD:$
PATT:user$
HOLD:$
user
PATT:otheruser@ll.com$
HOLD:$
PATT:otheruser$
HOLD:$
otheruser

 

 不加隱藏屬性的話,PATT,HOLD,COMM都會對應的輸出

cat email.txt |sedsed -d 's/@.*//g'
PATT:user@abc.com$
HOLD:$
COMM:s/@.*//g
PATT:user$
HOLD:$
user
PATT:otheruser@ll.com$
HOLD:$
COMM:s/@.*//g
PATT:otheruser$
HOLD:$
otheruser
這里的輸出中有一個 $符號,表示的是緩沖區的結尾。
 
<2>:讀取sed腳本
cat email-linker.sed
h;s|.*|<link>&</link>|;x;/@/{s/@.*/'s email:/;G;}
sedsed --indent -f email-linker.sed
h                                      
s|.*|<link>&</link>|                   
x                                      
/@/ {                                  
    s/@.*/'s email:/                   
    G                                  
}                        
-f, --file           將sed腳本從一個文件里讀取出來
-i, --indent      將讀取出來的復雜的sed腳本重新格式化成一種舒適的格式顯示出來
 
<3>
echo lile@yunovo.cn |sedsed -d -f email-linker.sed 
PATT:lile@yunovo.cn$
HOLD:$
COMM:h
PATT:lile@yunovo.cn$
HOLD:lile@yunovo.cn$
COMM:s|.*|<link>&</link>|
PATT:<link>lile@yunovo.cn</link>$
HOLD:lile@yunovo.cn$
COMM:x
PATT:lile@yunovo.cn$
HOLD:<link>lile@yunovo.cn</link>$
COMM:/@/ {
COMM:s/@.*/'s email:/
PATT:lile's email:$
HOLD:<link>lile@yunovo.cn</link>$
COMM:G
PATT:lile's email:\n<link>lile@yunovo.cn</link>$
HOLD:<link>lile@yunovo.cn</link>$
COMM:}
PATT:lile's email:\n<link>lile@yunovo.cn</link>$
HOLD:<link>lile@yunovo.cn</link>$
lile's email:
<link>lile@yunovo.cn</link>
-d 把調試模式打開,-f 把sed腳本的內容讀取出來去執行。從這個命令可以看到整個過程是如何執行的
 
<4>:HTMLIZE
把sed腳本已html形式顯示出來
sedsed --htmlize -f email-linker.sed >email-linker.sed.html

然后在瀏覽器里,在對應的路徑打開就可以看到彩色的輸出,打開這個文件email-linker.sed.html,全是html的標簽

 

<5>分詞模式,把一個sed命令分析
 sedsed -t 's/b/a/g'
    linenr:1
     addr1:
 addr1flag:
     addr2:
 addr2flag:
  lastaddr:
  modifier:
        id:s
   content:
 delimiter:/
   pattern:b
   replace:a
      flag:g
 extrainfo:
   comment:

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM