sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法2 _5 D3 M6 Q! Q- W
sed命令行格式为:
Y$ p# n" \2 D4 C# @6 \& d/ c sed [-nefri] ‘command’ 输入文本
常用选项:
/ o' G Y9 z1 E4 |) f' \+ J% A: x! G- ] -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
! k3 @# s; j' C- h. z4 a -e∶直接在指令列模式上进行 sed 的动作编辑;
; T% i( t: h7 p; g0 R7 Y+ V3 p, b -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
, X [& @( w1 Q' f6 y* g -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
" _1 [$ Q& T" z2 o* m/ R* { -i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:9 A: {* x+ J. J. }' k. Q0 r
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
1 E' L: R/ h2 _8 h8 k- v c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!' R7 u$ W$ p8 c) Q" T. Z0 x* K6 ^
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;! t8 V5 |! \2 H q( M+ _9 ?
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
, C* ^0 Q7 }8 G4 [ p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
& x4 B# U/ h' a! P, U s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
举例:(假设我们有一文件名为ab)
& P6 D8 |4 I" x2 n: M3 R5 y$ g 删除某行. M5 F! Q- I7 p, |7 d
[root@localhost ruby] # sed '1d' ab #删除第一行
) J' c: O% ?8 E0 [7 c [root@localhost ruby] # sed '$d' ab #删除最后一行
' |! x O8 T3 U( @8 H9 R* S, W [root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行. `' n- s2 M' o
[root@localhost ruby] # sed '2,$d' ab #删除第二行到最后一行
显示某行
5 X. A- N0 S# z) P& y1 D2 o. [root@localhost ruby] # sed -n '1p' ab #显示第一行
- g' ]5 ?% t- t, r* B [root@localhost ruby] # sed -n '$p' ab #显示最后一行
; U- U% ^$ u1 l3 ^ [root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行
, l: V- H$ Q1 ~% l [root@localhost ruby] # sed -n '2,$p' ab #显示第二行到最后一行
使用模式进行查询
0 m2 Y* ~& j: d2 W$ O2 L: R( s7 m [root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行) [% D4 M. j% v8 }$ ?7 u, C/ e
[root@localhost ruby] # sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
增加一行或多行字符串
h8 M- H8 o# v. m3 Q2 y3 e- u [root@localhost ruby]# cat ab
+ }' n, J. j5 H+ A5 c( m/ I Hello!2 }. p" b& O1 q, [
ruby is me,welcome to my blog.
& R- P( e3 s2 o- t2 x8 k& Y: s end
" V; |$ t2 T% d9 C' ]8 \ e [root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea"
+ ~+ J; F( i' r6 T0 x( {$ ~( b Hello!9 c& s3 g9 L# T
drink tea6 D5 g! E6 l2 }+ W# h( M8 h
ruby is me,welcome to my blog.
: K5 h* p1 R! H( V+ Y end7 G: _! f- z, \$ |% l# b; [
[root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"5 d/ I6 w5 i) ]2 Q( A# G5 E
Hello!( s& Z6 |1 r# \2 V0 Y8 j0 w
drink tea9 L6 m6 R( ^+ B1 S5 o0 O2 y$ D
ruby is me,welcome to my blog.$ ?7 P0 J1 x. e! m# {, v$ |
drink tea
+ Y% I# v. g, {2 h end$ i5 Q# j1 I5 Z g- p
drink tea
" q) |# T/ {% n0 {2 j [root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n
3 p8 a3 h! [7 P Hello!6 m i/ f; l0 K
drink tea0 h# E: |) o; @( T9 J: ]
or coffee! D8 V( g" J6 M1 ~- a0 Y
ruby is me,welcome to my blog.5 s- L( q- J' e0 C
end
代替一行或多行- s- [7 R# l2 B0 U: F% H* @
[root@localhost ruby] # sed '1c Hi' ab #第一行代替为Hi
- y' c, R3 H: T6 \ Hi
7 C9 g9 x- m4 B# Q* Y7 @ T: x3 n ruby is me,welcome to my blog.
+ R6 o* @7 {1 \( q8 O end
# W; U" b8 _, z [root@localhost ruby] # sed '1,2c Hi' ab #第一行到第二行代替为Hi: [* ]4 k9 g5 b4 {% w
Hi
" A6 f% E4 Q/ P1 S end
替换一行中的某部分
9 r) ~/ Y* K3 M1 U* X 格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式); m1 G$ G" {- O4 V, V
[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替换ruby为bird
$ k0 z7 o, {8 I0 o# G, Q. } [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g' #删除ruby
插入
3 w/ I8 _7 u, s [root@localhost ruby] # sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"+ c! ]8 h9 H+ O/ T* H
[root@localhost ruby]# cat ab9 o! k, n7 ~' ]% Y1 U. |$ C
Hello!! L% U6 ~! v6 ~6 Q
ruby is me,welcome to my blog.
3 S- L! k3 @( [- C' E end& m$ @6 t# {. j" w: F0 d
bye
删除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
替换匹配行中的某个字符串
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
4 _" t) ^- D3 k Z' r1 v% I