快捷搜索:

加油,普通人

期盼已久的片子,另类的superhero。演员演得都很到位,不再有飞天遁地的表演,更多的是真枪实弹的打斗和丝丝温情。

Sed与AWK入门教程之Sed篇

最喜欢其中一句话:“more power, more responsibility, but to get more responsibility, you have to got more power."

 

nicolas cage 老当益壮,动作片也很不俗。小姑娘更拽,god bless me,我闺女要成这样就好了。

Sed和AWK是*nix命令行里面文本处理的神器,相当的强大.它们都是面向行的,或者说它们处理文本的方式都是一行接着一行的处理,从标准输入或者文件中读取内容,一行一行的执行脚本命令,然后打印输出到标准输出,直到文件结尾(EOF).

 

图片 1

 

Sed

Sed是一个流编辑器(Stream editor),它的功能在于对于一个输入流进行编辑和处理.相当于是对一个输入流进行脚本性的编辑.其实它就是对一个输入流进行ed(一个面向行的编辑器)的脚本编辑.

Sed命令包括二部分,一部分是命令行参数或者说命令的执行方式,另一部分就是它的编辑命令,也常称作脚本.

命令执行方式:

sed [OPTIONS] -e 'scripts' | -f script-file [input-files]

如:

[plain] 

[[email protected]:~]$sed -n -e 'p' speech.txt  

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

看出来了吧,这相当于cat 命令.

[html] 

[[email protected]:~]$cat speech.txt   

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

命令行参数

可以参考man手册.比较常用的有:

 

-n --quiet --silent

      不自动打印模式空间.简单来讲就是不自动打印当前要处理的行.sed会读入一行,放入到一个叫Pattern space(模式空间)里,以便于执行编辑命令来处理它.默认情况下,会自动把这一行(Pattern space里的内容)打印出来.对比下不指定这个参数时的情况就明白了:

[html] 

[[email protected]:~]$sed -e 'p' speech.txt  

With great power comes great responsibility.  

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

The freedom is nothing but a chance to be better.  

你会看到重复,原因就是第一行是默认打印的Pattern space的内容(也就是要处理的行的内容). 然后执行编辑命令,因为编辑命令是简单的p(打印内容),所以你就看到重复的输出.

但如果加了-n(或者--quiet --silent)会变成这样:

[html] 

[[email protected]:~]$sed -n -e 'p' speech.txt  

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

-e 'scripts'

    指定编辑命令,或者叫做脚本.就是一要执行的sed所支持的编辑命令.主要是模式匹配和文本替换,插入,删除之类的编辑操作.

    这个选项可以指定多个,sed会按从左到右的顺序,一个一个的执行.

[html] 

[[email protected]:~]$sed -e '=' -e 'p' -e 's/great/poor/' speech.txt  

1  

With great power comes great responsibility.  

With poor power comes great responsibility.  

2  

The freedom is nothing but a chance to be better.  

The freedom is nothing but a chance to be better.  

解析:第一个命令'='是打印行号;第二个是打印这一行;第三个是做替换.

 

-f script-file

   执行指定的文件中的脚本.也就是不把编辑命令放在命令行中,而是放在一个文件里面.让sed去执行文件里面的命令.

-i[Suffix] --in-place[=Suffix]

即时的编辑输入的文件.如果指定Suffix,则会用其作后缀来备份输入文件.默认的行为是从输入文件中一行一行的读入文本,然后执行命令,然后输出结果到标准输出,也就是说对原文本没有影响,并不会改动原文件.但有些时候我们想改变原文件,也就是说要对原文件进行编辑.这时就需要用到此选项.为了不丢失数据,可以指定后缀来备份原文件.

例如:

[plain] 

[[email protected]:~]$cat speech.txt   

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

[[email protected]:~]$sed -i.bak -e 's/great/poor/g' speech.txt   

[[email protected]:~]$cat speech.txt  

With poor power comes poor responsibility.  

The freedom is nothing but a chance to be better.  

[[email protected]:~]$cat speech.txt.bak   

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

命令是把文件中的great替换成poor,并把原文件备份为.bak.

到这里,是不是让你想起了强大的perl命令,也有类似的功能:

[plain] 

[[email protected]:~]$perl -p -i.bak -e 's/poor/great/g' speech.txt  

[[email protected]:~]$cat speech.txt  

With great power comes great responsibility.  

The freedom is nothing but a chance to be better.  

[[email protected]:~]$cat speech.txt.bak   

With poor power comes poor responsibility.  

The freedom is nothing but a chance to be better.  

 

 

命令行参数仅是sed的一部分,它的主要核心部分是它的编辑命令,或者称作它的脚本,也就是通过-e选项指定的,或者通过-f指定的脚本文件.

 

编辑命令的格式:

[命令作用范围][!] cmd [cmd-args]

如,

[plain] 

[[email protected]:~]$sed -n -e '1 p' speech.txt  

With great power comes great responsibility.  

命令的作用范围

也可以称作是寻址.通俗的讲就是指定后面的编辑命令的作用范围,通常有几种方式来指定范围:

 

不指定 --- 如果不指定具体的范围,那么将作用到所有的行.

[plain] 

本文由澳门微尼斯人娱乐发布于影视看点,转载请注明出处:加油,普通人

相关阅读