sedsed 一个更好理解sed执行过程的工具

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:

复制代码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值