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>:文本内容
这里面有几个参数选项:可以用 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:[email protected]$
COMM:s/@.*//g
PATT:user$
user
PATT:[email protected]$
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:[email protected]$
HOLD:$
PATT:user$
HOLD:$
user
PATT:[email protected]$
HOLD:$
PATT:otheruser$
HOLD:$
otheruser

 

 不加隐藏属性的话,PATT,HOLD,COMM都会对应的输出

cat email.txt |sedsed -d 's/@.*//g'
PATT:[email protected]$
HOLD:$
COMM:s/@.*//g
PATT:user$
HOLD:$
user
PATT:[email protected]$
HOLD:$
COMM:s/@.*//g
PATT:otheruser$
HOLD:$
otheruser
这里的输出中有一个 $符号,表示的是缓冲区的结尾。
 
<2>:读取sed脚本
cat email-linker.sed
h;s|.*|&|;x;/@/{s/@.*/'s email:/;G;}
sedsed --indent -f email-linker.sed
h                                      
s|.*|&|                   
x                                      
/@/ {                                  
    s/@.*/'s email:/                   
    G                                  
}                        
-f, --file           将sed脚本从一个文件里读取出来
-i, --indent      将读取出来的复杂的sed脚本重新格式化成一种舒适的格式显示出来
 
<3>
echo [email protected] |sedsed -d -f email-linker.sed 
PATT:[email protected]$
HOLD:$
COMM:h
PATT:[email protected]$
HOLD:[email protected]$
COMM:s|.*|&|
PATT:[email protected]$
HOLD:[email protected]$
COMM:x
PATT:[email protected]$
HOLD:[email protected]$
COMM:/@/ {
COMM:s/@.*/'s email:/
PATT:lile's email:$
HOLD:[email protected]$
COMM:G
PATT:lile's email:\n[email protected]$
HOLD:[email protected]$
COMM:}
PATT:lile's email:\n[email protected]$
HOLD:[email protected]$
lile's email:
[email protected]
-d 把调试模式打开,-f 把sed脚本的内容读取出来去执行。从这个命令可以看到整个过程是如何执行的
 
<4>:HTMLIZE
把sed脚本已html形式显示出来
sedsed --htmlize -f email-linker.sed >email-linker.sed.html

然后在浏览器里,在对应的路径打开就可以看到彩色的输出,打开这个文件email-linker.sed.html,全是html的标签

sedsed 一个更好理解sed执行过程的工具_第1张图片

 

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

 

 

 

 

 

 

你可能感兴趣的:(sedsed 一个更好理解sed执行过程的工具)