sed命令的用法和一些问题

流编辑器sed的使用

sed [option] command input-file
sed [option] -f script-file input-file


常用选项

n:不输出所有行,默认是输出所有行
e:允许在该选项后面加一条新的编辑指令
f:用于指定装有编辑指令的脚本文件
h:输出sed的帮助信息

常用的定位方式

n:表示行号为n的行
m,n:表示一个行号的范围,从m行到n行
m,n!:排除m行到n行
/pattern/              表示匹配pattern的所有行
/pattern1 /pattern2/   表示匹配pattern1和pattern2的所有行,需要使用e将两个模式隔开
/pattern/,+n           从匹配pattern的行开始,向后n行的所有行,这里总共输出n+1行
/pattern/.~n           从匹配pattern的行开始,向后n行的所有行,这里总共输出n行
n,/pattern/            表示从第n行开始到匹配pattern之内的所有行

例子:
1.使用数字3指定输出的行号,n表示不输出所有行  sed -n '3p' students
       加上n参数很重要,否则总是显示所有行,p表示的显示
2.输出第3行到第5行                            sed -n '3,5p' students
3.使用模式匹配定位                            sed -n '/[tT]angwei/p' students
4.同时使用行号和模式匹配                      sed -n '2,/hetao/p' students
          此处如果不加n的话,2到hetao匹配的行会打印两遍。因为不加n就会所有行输出一遍,然后这个命令会再输一遍。
5.使用编辑指令=输出行号                       sed -n '/xizang/=' students
6.删除行的指令 d  删除第1到第3行              sed '1,3d' students
7.使用编辑指令a在第一行后插入                 sed '1a \This is a new line.' students
   值得注意的是:sed不会去修改文件的内容,只是对你的操作显示,比如源文件内容是aaaaaa,执行上述操作以后屏幕打印
             aaaaaa
             This is a new line.
    但是文件的内容是不会发生变化的。除非你从定向写入。
     例如执行一下命令将结果保存到另一个文件aa1  sed '1a \This is a new line.' students>aa1  
8.使用编辑指令a在最后一行后插入                 sed '$a \This is a new line.' students
9.如果要插入的数据很长,可以用r先读取再插入   sed '3r ex' students 把ex文件插入3行以后
10.使用~时有这样一个问题:如果你的文本文件aa执行下面的操作
     有趣的现象是:如果是使用sed '1,~1p' aa,总是会输出两行,sed '2,~2p' aa,总是会输出3行。与+n的作用一样。
11.用-f参数直接执行脚本文件 sed -f insert.sed aa
   insert.sed文件如下:
    /a/ i\
    The first line.\
    The second line.\
    the last line.
  此时是在匹配a的行前面加上以上3行数据。其中1,2行的反斜杠不能丢。没有反斜杠,linux会去解析2,3两行的数据,认为它是什么命令。

你可能感兴趣的:(linux)