022011
 

十、sed命令的使用

sed是stream editor的缩写,它是一个非交互式的流文件编辑器。一般适用于按行操作文本的情况。
它的用法是
    sed [选项] '[基本命令]模式[基本命令]' 输入文件

sed 的一些选项
    -n 只打印匹配行,如不指定,则默认打印所有行。
    -f 从一个sed脚本文件获得指令
    -e 使用多个命令,如
        sed -n -e '/music/p' -e '/music/=' a.txt 其中第一个命令打印匹配行,第二个打印行号。

sed的模式
    和一般模式相比,sed多了关于行号的匹配方式,数字即代表了行号,$代表最后一行。
        所以'1,$p'表示打印第一至最后一行;'3p'表示打印第三行。
    要匹配一般的模式,要用斜线括起来,'/never/p'
    混用行号和模式的情况
        x                 x为一行号,如1


        x,y               表示行号范围从x到y,如2,5表示从第2行到第5行
        /pattern/         查询包含模式的行。例如/ d i s k /或/[a-z]/ 
        /pattern/pattern/ 查询包含两个模式的行。例如/disk/disks/
        /pattern/,x       在给定行号上查询包含模式的行。如/ribbon/,3
        x , /pattern/     通过行号和模式查询匹配行。3,/vdu/
        x,y!              查询不包含指定行号x和y的行。如1,2!

基本命令
    p 打印匹配行。后置,如sed -n '1,3p' a.txt
    = 打印匹配行号。后置。
    a 在匹配行后追加行。后置,如 sed -n  '/company/ a\ blahblah' a.txt。a后的反斜杠表明可以换行输入文本。
    i 在匹配行前插入行。后置,类似a,这些命令最好写入sed脚本,避免引号的麻烦。
    d 删除匹配行,后置。
    c 用新文本替换定位文本。后置,类似a。
    s 替换掉被查找到的模式。前置。例如 sed -n 's/wala/xiha/g' a.txt
        默认只替换第一次匹配,使用子选项g可全部替换
        使用&可以引用当前的匹配,如 sed -n 's/nurse/what &/p' a.txt。则nurse被替换为what nurse而不是what
    w 写文本到一个文件。后置,如 sed '/nothing/ w result/' a.txt
    r 从一个文件中读文本。后置,类似于w。
    {} 匹配后,执行这个命令组
    q 匹配后退出。后置。
    l 显示控制字符。后置。

十一、排序,合并与分割

sort排序
    一般命令格式为 sort -cmu -o output_file [其他选项] +pos1 +pos2 input_file
        -c 测试是否已经sort过
        -m 合并两个文件后排序,如 sort -m +o file1 file2
        -u 删除重复行
        其它选项
            -n     按数字而非字符串形式排序,不指定则按ascii排序
            -t     指定分隔符,默认是空格或TAB
            +数字   从第几个域排序,第一个域编号为0。如sort +3n input_file 表示按照第三个域的数字大小排序
                    可以+数字1 +数字2,是先按域1排序,再按2排序
            -数字   不按某个域排序
            -k数字  类似于+数字,但起始域号为1
            +a.b   ab为数字,表示按第a+1域的第b+1个位置排序,(因为从0开始编号)

head -n
    显示文件开头的n行

tail -n
    显示文件结尾的n行

uniq
    去除文件中连续的重复行,与sort -u的区别就是“连续的”
    -c 打印重复次数
    -f 忽略前n个域

join命令
    连接两个文件 join -j1 3 -j2 4 file1 file2 > result。表示按第一个文件的域3和第二个文件的域4进行连接,结果放入result文件

cut 命令
    cut -d: -f5-8 per.txt
    -c 指定剪切的字符数
    -f 指定剪切的域数
    -d 指定分隔符,默认为空格或TAB

paste命令
    paste [选项] file1 file2
    -d      指定分隔符,默认空格
    -s      同一个文件粘贴为一行,第二个文件粘贴为下一行。。。默认为按列粘贴。
    单一个 – 代表从标准输入中得到一次结果。如ls | paste —- 标明将ls的结果按一行四个的格式粘贴输出

split命令
    split -size input_file
    分割大小以行计算,结果文件按x[a-z][a-z]的格式命名,如xaa, xab, xac…

十二、tr命令的用法

主要用于字符转换或者抽取控制字符

    ts -s "[a-z]" input_file 压缩输入文件中重复的a-z字符,即hommmeeee会被压缩为home,[\012]可删除空行
    ts "[A-Z]" "[a-z]" input_file 大写转换为小写
    ts -cs "[a-z][A-Z]" "[\012*]" input_file 。-c标明只保留所有的字母,其余的删除并压缩空行
    


 

附,sed的用法实例,转载自:http://blog.csdn.net/showman/archive/2009/07/31/4396142.aspx

1. 打印:p
[[email protected] chap04]# cat datafile               原文件
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

[[email protected] chap04]# sed  -n '/north/p' datafile   取消默认输出 只打印包含模板的行
northwest       NW      Charles Main            3.0     .98     3       34
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9

[[email protected] chap04]# sed '/north/p' datafile       打印包含模板的行及打印默认输出
northwest       NW      Charles Main            3.0     .98     3       34
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

2. 删除:d
   [[email protected] chap04]# sed '3d'  datafile            删除第三行
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

[[email protected] chap04]# sed '3,$d'  datafile          删除第三行到最后的所有行
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23

[[email protected] chap04]# sed '/north/d' datafile        删除所有包含模板north的行
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
central         CT      Ann Stephens            5.7     .94     5       13

3. 选定行的范围:逗号
    [[email protected] chap04]# sed -n '/west/,/east/p' datafile     所有在模板west和east所确定的行都被打印 
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17

[[email protected] chap04]# sed -n '1,5'p datafile           打印第一、五行的内容
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17

[[email protected] chap04]# sed  '/west/,/east/s/$/**?VACA**/' datafile   对于east和west之间的行,末尾用**?VACA**替换
northwest       NW      Charles Main            3.0     .98     3       34**?VACA**
western         WE      Sharon Gray             5.3     .97     5       23**?VACA**
southwest       SW      Lewis Dalsass           2.7     .8      2       18**?VACA**
southern        SO      Suan Chin               5.1     .95     4       15**?VACA**
southeast       SE      Patricia Hemenway       4.0     .7      4       17**?VACA**
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

[[email protected] chap04]# sed  -n '/west/,/south/p' datafile                 
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18

4. 多点编辑:e命令
[[email protected] chap04]# sed -e '1,3d' -e 's/Hemenway/Jones/' datafile    删除1到3行,用Hemenway替换Jones
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Jones  4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

5. 从文件读入:r 命令
[[email protected] chap04]# cat newfile 
        nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
        | ***SUAN HAS LEFT THE COMPANY***      |
        |_________________________________|

[[email protected] chap04]# sed  '/Suan/r newfile'  datafile       把newfile文件内容放到Suan行的下面
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
        nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
        |    ***SUAN HAS LEFT THE COMPANY***   |
        |_________________________________|
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

注:如果不止一个Suan 则newfile的内容就将显示在所有匹配行的下面

6. 写入文件:w命令
[[email protected] chap04]# sed  -n '/north/w  newfile2'  datafile   命令w表示把所有包含north的行写入到newfile2

[[email protected] chap04]# cat newfile2
northwest       NW      Charles Main            3.0     .98     3       34
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9

7. 追加:a 命令 
[[email protected] chap04]#  sed '/^north/a —->THE NORTH SALES DISTRICT HAS MOVED    
northwest       NW      Charles Main            3.0     .98     3       34
—->THE NORTH SALES DISTRICT HAS MOVED
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
—->THE NORTH SALES DISTRICT HAS MOVED
north           NO      Margot Weber            4.5     .89     5        9
—->THE NORTH SALES DISTRICT HAS MOVED
central         CT      Ann Stephens            5.7     .94     5       13
注: 在出现首个单词是north的后一行追加—->THE NORTH SALES DISTRICT HAS MOVED行

8. 插入: i 命令
[[email protected] chap04]# sed '/eastern/i\
> NEW ENGLAND REGION\
> ————————————-' datafile
northwest       NW      Charles Main            3.0     .98     3       34
western         WE      Sharon Gray             5.3     .97     5       23
southwest       SW      Lewis Dalsass           2.7     .8      2       18
southern        SO      Suan Chin               5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
NEW ENGLAND REGION
————————————-
eastern         EA      TB Savage               4.4     .84     5       20
northeast       NE      AM Main Jr.             5.1     .94     3       13
north           NO      Margot Weber            4.5     .89     5        9
central         CT      Ann Stephens            5.7     .94     5       13

注:如果模板eastern被匹配,i命令把反斜杠后面的文本插入到包含eastern的行的前面

9. 替换:s 命令

[[email protected] oracle]# pwd
/u01/app/oracle
[[email protected] oracle]# pwd  | sed  's/\/[^\/]*$/old/'      把“/ u01/app/oracle”的 “/oracle”替换为old 
/u01/appold
[[email protected] chap04]# sed -n 's/Hemenway/Jones/pg' datafile      所有的Hemenway行被Jones 替换并打印
southeast       SE      Patricia Jones  4.0     .7      4       17

 Leave a Reply

(必须填写)

(必须填写,邮件地址不会被泄露)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>