注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

随机过程

http://superware.blog.163.com

 
 
 

日志

 
 

Sed for handling formated text  

2015-01-17 15:30:43|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

格式化文本处理工具 sed 可以对数据行进行替换、删除、新增、选取等操作。


一、sed 命令行格式
      

sed [-nefri] ‘command’ input

或者写为:

sed [option] 'command' input


二、常用选项

-n : 使用安静 (silent) 模式。一般情况下 sed 将所有来自 STDIN 的信息都会输出到屏幕上。
     但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行才会被列出来。            
-e : 直接在指令列模式上进行 sed 的编辑;
-f : 将 sed 的操作写在一个文件内,-f filename 则可以执行 filename 内的 sed 操作;
-r : sed 采用兼容扩展型正则表达式语法。默认采用标准正则表达式语法;
-i : 直接修改读取的 input 内容,而不是输出到屏幕上。 

    

三、常用命令

a \string  : append, 将 a 后面 string 追加为本行的下一行;
c \string    : modify,将 n1,n2 之间的行修改为 c 后面的 string;(与 vim 中的 wc 命令类似)
d     : delete,将 d 前指定的字符串删除;
i \string    : insert,将 i 的后面 string 插入为当前行的上一行;
p     : print,将 p 前指定的行打印到屏幕上,通常与 -n 一起用;
s/src/dst/g : search & replace,例如 1,20 s/old/new/g, 查找并替换;

/pattern/ : pattern matching, 用 pattern 匹配每个输入行;

=     : 获取当前行行号,并在该行位置打印到输出。例如 sed '/hello/ =' filename 获取 hello 所在的行号。



四、举例

假设输入文件名为 test.txt

$ cat test.txt

Hello any body!
Are you ready?
I am superware, welcome to my blog.
end.



1、删除(delete)

$ sed '1 d' test.txt       # 删除第一行

Are you ready?
I am superware, welcome to my blog.
end.


$ sed '$ d' test.txt       # 删除最后一行

Hello any body!
Are you ready?
I am superware, welcome to my blog.

$ sed '1,2 d' test.txt     # 删除第一行到第二行

I am superware, welcome to my blog.
end.


$ sed '2,$ d' test.txt     # 删除第二行到最后一行

Hello any body!


2、打印(print)

$ sed -n '1 p' test.txt    # 显示第一行,-n 表示只显示被处理的行

Hello any body!


$ sed '1 p' test.txt # 不带 -n,表示不仅显示被处理的行,也显示没有被处理的行

Hello any body!
Hello any body!
Are you ready?
I am superware, welcome to my blog.
end.


$ sed -n '$ p' test.txt    # 显示最后一行
end.


$ sed -n '1,2 p' test.txt  # 显示第一行到第二行

Hello any body!
Are you ready?


$ sed -n '2,$ p' test.txt  # 显示第二行到最后一行
Are you ready?
I am superware, welcome to my blog.
end.


3、
模式匹配pattern matching

$ sed -n '/Hello/ p' test.txt    # 查询包括关键字 akaedu 所在所有行

Hello any body!


$ cat test_02.txt

Hello any body!
Are you ready?
I am superware, welcome to my blog.
$\alpha + \beta = \gamma$.
end.


$ sed -n '/\$/ p' test_02.txt        # 查询包括关键字 $ 所在所有行,使用反斜线 \ 屏蔽特殊含义

$\alpha + \beta = \gamma$.


4、追加(append)

$ cat test.txt

Hello any body!
Are you ready?
I am superware, welcome to my blog.
end.

$ sed '1 a \I like coffee.' test.txt    # 第一行后增加字符串 "drink tea"

Hello any body!

I like coffee.

Are you ready?
I am superware, welcome to my blog.
end.


$ sed '1,3 a \I like coffee.' test.txt    # 第一行到第三行后增加字符串 "drink tea"
Hello any body!

I like coffee.

Are you ready?

I like coffee.

I am superware, welcome to my blog.

I like coffee.

end.


$ sed '1 a \I like coffee. \n\I like tee.' test.txt     # 第一行后增加多行,使用换行符 \n

Hello any body!

I like coffee.
I like tee.

Are you ready?
I am superware, welcome to my blog.
end


5、修改(modify)

$ sed '1 c \Hi, any body!' test.txt            # 把第一行修改为 Hi

Hi, any body!
Are you ready?
I am superware, welcome to my blog.
end


$ sed '1,2 c \Hi, any body' test.txt            # 把第一行和第二行一起修改为 Hi

Hi, any body!
Are you ready?
I am superware, welcome to my blog.
end


6、查找与替换(search & replace)

格式:

sed 's/old_regexpr/new_regexpr/g'

举例:

$ sed -n '/Hello/ p' test.txt | sed 's/Hello/Hi,/g'  # 替换 Hello 为 Hi,

Hi, any body!


$ sed -n '/Hello/ p' test.txt | sed 's/Hello//g'      # 删除 Hello

any body!


7、插入(insert)

$ sed -i '$ a bye.' test.txt    # 在文件 test.txt 中最后一行直接输入 "bye"

$ cat test.txt
Hello any body!
Are you ready?
I am superware, welcome to my blog.
end.

bye.


  评论这张
 
阅读(82)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017