≡ 典典 - 单机游戏攻略 ≡'s Archiver

admin 发表于 2006-10-10 17:27

sed用法 + 自己总结实用工具。

使用方法:比如替换/etc/ssh/sshd/sshd_config 中的:UsePAM.* 为:UsePAM no 同时并备份原文件
;@l [%i }F
$D-Q @2O}!K7f @ K3?\(?_6Aez$K$K
sed -i.bak -e 's/UsePAM.*$/UsePAM no/' /etc/ssh/sshd_config
]yG.bu 7Cx3fzN]'E
重起生效 /etc/rc.d/sshd restart
w;qabJ ` jd1Q5p*F
命令详细用法:$_ u+bnmcXb
av3~M2N0W
Sed 命令列可分成编辑指令与文件档部份。其中 , 编辑指令负责控制所有的编辑工作 ; 文件档表示所处理的档案。.]"g_+rvCs;Q
sed 的编辑指令均由位址(address)与函数(function)两部份组成 , 其中 , 在执行时 , sed 利用它的位址参数来/gsMfaN1Q
决定编辑的对象;而用它的函数参数(解[3])编辑。
ki|iqx 此外 , sed 编辑指令 , 除了可在命令列上执行 , 也可在档案内执行。其中差别只是在命令列上执行时 , 其前必)kal'H5S
须加上选项 -e ; 而在档案(解[4])内时 , 则只需在其档名前加上选项 -f。另外 , sed 执行编辑指令是依照它
)os'[fEqNZ 们在命令列上或档内的次序。3~ lv OD9?T
*|]V8KA3Z[ g
下面各节 , 将介绍执行命令列上的编辑指令 、sed 编辑指令、执行档案内的编辑指令、执行多个档案的编辑、及
eN8pZ }Nzf 执行 sed 输出控制。
ictq9RE.l;s 'E/_,H&jT
2.1 执行命令列上的编辑指令3A!V@+Yr w
2.2 sed 编辑指令
8[b/ESn 2.3 执行档案内的编辑指令
-mDUYe1b-o 2.4 执行多个档案的编辑
lqo.J0s(A9D 2.5 执行 sed 输出控制
6lS q3f;}!PCr 2.1.执行命令列上的编辑指令
'qB:[9~ugK*i#Jyz 当编辑指令(参照[section 2.2])在命令列上执行时 , 其前必须加上选项 -e 。其命令格式如下 :!I.V/]L:}U4W
sed -e '编辑指令1' -e '编辑指令2' ... 文件档6@aN4]6U,U6z)A

o r|'tBo 其中 , 所有编辑指令都紧接在选项 -e 之後 , 并置於两个 " ' " 特殊字元间。另外 , 命令上编辑指令的执行是由r[^_5e I? |4l+@6O3N
左而右。
}w4GCv$c*u#C
s*V%ki;N;DI6ui 一般编辑指令不多时 , 使用者通常直接在命令上执行它们。例如 , 删除 yel.dat 内 1 至 10 行资料 , 并将其omQ?h&t3\h;e
馀文字中的 "yellow" 字串改成 "black" 字串。此时 , 可将编辑指令直接在命令上执行 , 其命令如下 :0B#x:YT\7u1~E

t l4{8~!oS%AH{ sed -e '1,10d' -e 's/yellow/black/g' yel.dat.`Q%[?'k c3@.w

K:x l9TNq4p 在命令中 , 编辑指令 '1,10d'(解[5])执行删除 1 至 10 行资料 ; 编辑指令 's/yellow/black/g'(解[6]) ,
Bm z7UC_| "yellow" 字串替换(substuite)成 "black" 字串。T$lm7D [
2.2 sed 的编辑指令
CUW|jK6t!P sed 编辑指令的格式如下 :
n5s1A:\f vBY"j7U2~ [address1[,address2]]function[argument]
b O7p"yM b
n |6c5m }S g+MU 其中 , 位址参数 address1 、address2 为行数或 regular expression 字串 , 表示所执行编辑的资料行 ; 函数参g/\7Q&s Yh[2v-lV k%W*m
数 function[argument] 为 sed 的内定函数 , 表示执行的编辑动作。+x"R9V]*l
下面两小节 , 将仔细介绍位址参数的表示法与有哪些函数参数供选择。.Lh8z _7R0s;EM`Q0C

S#@iG I6N v2w@H 2.2.1 位址(address)参数的表示法rP$O;H_
实际上 , 位址参数表示法只是将要编辑的资料行 , 用它们的行数或其中的字串来代替表示它们。下面举几个例子
H%j,b5T)i,^l} 说明(指令都以函数参数 d(参照[section4.2]) 为例) :FOL3ol3B(rI-H:c
删除档内第 10 行资料 , 则指令为 10d。
,A+i/s|9od"A,qS 删除含有 "man" 字串的资料行时 , 则指令为 /man/d。"U4v `-BWv|I
删除档内第 10 行到第 200 行资料, 则指令为 10,200d。'|r"ey.J1pr
删除档内第 10 行到含 "man" 字串的资料行 , 则指令为 10,/man/d。%D%Y9Y(@%wSg ^(I
接下来 , 以位址参数的内容与其个数两点 , 完整说明指令中位址参数的表示法(同样也以函数参数 d 为例)。
TJ.D Z[!F7F9y 位址参数的内容: M&@HeK)G8B
位址为十进位数字 : 此数字表示行数。当指令执行时 , 将对符合此行数的资料执行函数参数指示的编辑动作。例如 ,
p Y:[8R1`:w5q 删除资料档中的第 15 行资料 , 则指令为 15d(参照[section4.2])。其馀类推 ,如删除资料档中的第 m 行资料 , 则
kb Qp3{A 指令为 md 。
Wj ^0U\#B0n.o5Gj
+_+bm V T"v P 位址为 regular expression(参照[附录 A]):
0O@ qQLer5l-Rd1w7T 当资料行中有符合 regular expression 所表示的字串时 , 则执行函数参数指示的编辑动作。另外 , 在C ?^.h)@OCM
regular expression 前後必须加上 "/"。例如指令为 /t.*t/d , 表示删除所有含两 "t" 字母的资料行。其中 , "." I;G u$HMOu1qN'V
表示任意字元; "*" 表示其前字元可重任意次 , 它们结合 ".*" 表示两 "t" 字母间的任意字串。r,EA4\@~:E
5h ` bXU0_
位址参数的个数 : 在指令中 , 当没有位址参数时 , 表示全部资料行执行函数参数所指示的编辑动作; 当只有一位址t9FV#U B9v6aB
参数时 , 表示只有符合位址的资料行才编辑 ; 当有两个位址参数 , 如 address1,address2 时 , 表示对资料区执行 ae k/cC/`
编辑 , address1 代表起始资料行 , address2 代表结束资料行。对於上述内容 , 以下面例子做具说明。
6{7{({K2y7RR'l{ *C wj8p3F
例如指令为
{u;n s*cB3Ur
$G?+f-[)A.y d
'y O4h$Z9U6h8f){aW
#GN!tUZ#S/q$|1~ 其表示删除档内所有资料行。
M+K]A e 例如指令为 @5g0W~8Mzp@(w
\$HBy1s4A
5d
q4k D3_N{ y
(N)xh&D[8Y Z 其表示删除档内第五行资料。%rV9lo QGr
例如指令为
*}&]a$MP x"^ (X)r2qa lA
1,/apple/d
T-N3X+h*e;C|;]zY)_ mD}#Y i(J ~5X9{/J
其表示删除资料区 , 由档内第一行至内有 "apple" 字串的资料行。N\%h L9N'[^
例如指令为
wg VNJO8\Gn4C3{
n'b,G h6_gu'HQ;l /apple/,/orange/dlQ6U&VR{
6hM?%u[3g0M
其表示删除资料区 , 由档内含有 "apple" 字串至含有 "orange" 字串的资料行er$hJ7r0?y&?}
2.2.2 有那些函数(function)参数Xhk)L8K
下页表中介绍所有 sed 的函数参数(参照[chapter 4])的功能。.g&D[$Z9At"t
函数参数 功能
FLgq"].@k : label 建立 script file 内指令互相参考的位置。
1t4a"W:`0U'N b8} # 建立解
&W$~ IDI R { } 集合有相同位址参数的指令。
D$b.bB r ! 不执行函数参数。*I.N}OK!U6Q}
= 印出资料行数( line number )。
3q"n)@C4S,_"A/b} a 添加使用者输入的资料。
)d d7Pa,@.H] b label 将执行的指令跳至由 : 建立的参考位置。,wnM7O6g d:QS.p@
c 以使用者输入的资料取代资料。*T7rR5F9s eN!zyO
d 删除资料。
8x"[4gdL1Ns.y D 删除 pattern space 内第一个 newline 字母 前的资料。V d:G4i Jq2T
g 拷贝资料从 hold space。p-k)|.uDvv:t
G 添加资料从 hold space 至 pattern space 。
kxCp1l/[O h 拷贝资料从 pattern space 至 hold space 。
4o#})|6t yC H 添加资料从 pattern space 至 hold space 。
3g~ oL{ l 印出 l 资料中的 nonprinting character 用 ASCII 码。
5jk?-H$c|5q i 插入添加使用者输入的资料行。$q(`4Y}$RxXi
n 读入下一笔资料。
.a$O;O"~N N 添加下一笔资料到 pattern space。.sr:hu(|
p 印出资料。
|5R!FN1H9~V P 印出 pattern space 内第一个 newline 字母 前的资料。b2d4fu!Hfv.sn,j
q 跳出 sed 编辑。)tjnkh&[l,\:C"AH
r 读入它档内容。nhC(H.\ Ni
s 替换字串。
&z%}1Z9i9{0{5ql"I!o8| t label 先执行一替换的编辑指令 , 如果替换成牛p>则将编辑指令跳至 : label 处执行。 dqli.X:F
w 写资料到它档内。2A-K6~zL]
x 交换 hold space 与 pattern space 内容。
._\(L Om y 转换(transform)字元。ag/DAwCy
虽然 , sed 只有上表所述几个拥有基本编辑功能的函数 , 但由指令中位址参数和指令与指令间的配合 , 也能使%B'A&k;VoE
sed 完成大部份的编辑任务。
*Z0Mh&E#]:gA 2.3 执行档案内的编辑指令
-}:n _Fqw Y0Q.ty 当执行的指令太多 , 在命令列上撰写起来十分混乱 , 此时 , 可将这些指令整理储存在档案?-fdHbG2N
(譬如档名为 script_file )内 , 用选项 -f script_file , 则让 sed 执行 script_file 内的编辑指令。其命
h8`U1y g2r v 令的格示如下 :
~BU [u5{Q sed -f script_file 文件档
z_-| o.|%S D"xC
,Cp$K]&[a$um!z}:__ 其中 , 执行 script_file 内编辑指令的顺序是由上而下。例如上一节的例子 , 其可改成如下命令:w$a/y!b%N _
sed -f ysb.scr yel.datoX$DJ&J e%F8Db

v+u \-?iMb 其中 , ysb.scr 档的内容如下 :
&B]7S,v;}EOL^i 1,10dC;r{8}m:}QOV
s/yellow/black/gI1t[w6J j3e*Ar?

?7CG)R{d 另外 , 在命令列上可混合使用选项 -e 与 -f , sed 执行指令顺序依然是由命令列的左到右, 如执行至 -f 後
aC,P t2n\)M7r 档案内的指令 , 则由上而下执行。
|O$q(zc'r
|8Y1nK6ds+@
?yG[1n0x 2.4 执行多个文件档的编辑
%f*Re pkpz 在 sed 命令列上 , 一次可执行编辑多个文件档 , 它们跟在编辑指令之後。例如 , 替换'DSp|^ur$T `
white.dat、red.dat、black.dat 档内的 "yellow" 字串成 "blue" , 其命令如下:
f3I#V[Ih_L sed -e 's/yellow/blue/g' white.dat red.dat black.dat0q-I D{bP

;y"N!Mdh 上述命令执行时 , sed 依 white.dat、red.dat、black.dat 顺序 , 执行编辑指令 s/yellow/blue/(请参照[section 4.1] ,+AC C6w5P w
进行字串的替换。(s'T pB2gJ7}8tZ
sk)U,b9\-C%U
2.5.执行输出的控制
%e ~4_hS9L:F 在命令列上的选项 -n (解[7]) 表示输出由编辑指令控制。由前章内容得知 , sed 会 "自动的" 将资料由Ef^K&Hi&F4y:r
pattern space 输送到标准输出档。但藉着选项 -n , 可将 sed 这 "自动的" 的动作改成 "被动的" 由它所执行的9r;H`Q8c(h4{
编辑指令(解[8])来决定结果是否输出。;w(m]Y8J `(B
由上述可知 , 选项 -n 必须与编辑指令一起配合 , 否则无法获得结果。例如 , 印出 white.dat 档内含有 "white"
%h/f9LoViU8r 字串的资料行 , 其命令如下:
:P m]i)]]E7{5B.QQ
|cKqY sed -n -e '/white/p' white.dat4cZ*H-o^&\

A.G*p"]-[fpf 上面命令中 , 选项 -n 与编辑指令 /white/p (参照[section4.6]) 一起配合控制输出。其中 , 选项 -n 将输出控制权 d1v| uo
移给编辑指令;/white/p 将资料行中含有 "white" 字串印出萤幕。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.