老段带我学sed的笔记

课程地址:http://edu.51cto.com/course/course_id-1108.html
html


sed  '范围(条件)命令' 文件正则表达式

命令中引用shell的变量须要加上引号,单引号括起来变量 '$xxx',或者双引号括起来整个条件范围
条件命令中的斜杠分隔符能够换成其余任意字符,用在条件范围中存在斜杠容易混淆的时候shell


参数bash

-n 关闭默认输出,结合标签p,只输出符合条件范围的行 sed 's/tom/TOM/p'
-i 将修改结果回写到文件。-i.bak表示将源文件以.bak备份ide


d    删除
范围条件3d

使用数字表示行号htm

sed '3d' test       #删除第3行

用逗号,表示行号范围blog

sed '5,10d' test  #删除第5-10行

用波浪号~表示跨步get

sed '1~2d' test   #从第1行起,每2行删除1行。即,删除奇数行

用$表示最后一行it

sed '$d' test   #删除最后一行

正则表达式(用//括起来,可替换使用其余字符)

sed '/^student/d' test       #删除student开头的行
sed '/\bstudent\b/d' test    #删除包含student单词的行


s 替换 's/old/new/标签'

old部分能够使用正则表达式,new部分不能够使用正则表达式

sed 's/tom/TOM/2'     #将每行第2个出现的tom替换为大写TOM

标签g 对一行中全部符合条件的字符都执行操做
标签p 输出符合条件范围的行,未关闭默认输出的状况下,符合条件的行将输出两次


用分号;使sed一次性执行多个操做

sed  's/tom/TOM/g; s/aaa/AAA/g'  test
#将test中tom替换为TOM,接着在此基础上,将aaa替换为AAA

如下是另外一个例子,先将输出结果的连续逗号替换成单个,而后将逗号替换成制表符

wKioL1MlLZfCILGQAADynh6RZ98354.jpg

new部分能够使用的参数:
& 表示old的值
\U 把\U后面的全部字符更换为大写

sed  's/\[.*\]/\U&/' test #将test中[]内字符改成大写

\u 把\u后面的第一个字符更换为大写
\L 把\L后面的全部字符更换为小写
\l 把\u后面的第一个字符更换为小写
\E 终止\U\L的转换
\1 \2 引用old部分的分组内容,old部分的分组以()分隔,()须要\转义(sed -r 能够不用转义\引用括号)。数字表示第几个分组

sed -n 's/#\(Server\)\(Name\)/\2/p' test
#输出结果将#ServerName替换为Name

i 在条件范围行的上一行插入 sed  '1atest' file #在file第1行后面追加test行
a 在条件范围行的下一行插入
c 将知足某个条件的行替换(整行替换)

sed '/ONBOOT/c ONBOOT=yes/' ifcfg-eth0

y 替换 y/abc/XYZ/

n 在模式空间读取范围条件行的下一行
N 在模式空间将读取范围条件行追加到下一行,两行合并为一行,但两行之间仍然有\n换行符

-------------------------------------
rhce rhce rh
ce rhce rhce

sed 'N:s/rhce/RHCA/g' test
-------------------------------------

保持空间
x 保持空间和模式空间内容互换
h 把模式空间的内容拷贝到保持空间(覆盖)
H 把模式空间的内容拷贝到保持空间(追加)
g 把保持空间的内容写入到模式空间(覆盖)
G 把保持空间的内容写入到模式空间(追加)
-------------------------------------
tom
jingli
bob
zongjian
mary
jingli
jerry
zongjian

sed -n -e '/jingli/!h' -e '/jingli/{x;p}' test
显示jingli的上一行内容
sed -n -e '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' test
将jingli追加到上一行末尾,以冒号:分隔
sed -n  'h;n;G;p' test
奇数行和偶数行互换
-------------------------------------

sed 标签 功能,实现循环。格式以下sed ':标签 范围1 命令1; /模式/b'sed ':label s/rhce/RHCA/; /rhce/b label' test替换rhce为RHCA,以后检测是否存在rhce,知足条件执行标签跳转。

相关文章
相关标签/搜索