官網: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:
