全部博文(2065)
分类:
2010-01-15 14:48:58
SED常用操作命令整理
[整理人:hkebao#126.com 整理时间:
操作的示范文本
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
port = 3306
socket = /tmp/mysql.sock
简单的摘录了一段My.cnf 的配置信息出来。演示各个操作的方法
一、简单打印
1.1 sed -n '/port/p' my.cnf
输出:port = 3306
含义:打印包含port 关键字的一行
1.2 sed '/port/p' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
port = 3306
port = 3306
socket = /tmp/mysql.sock
含义:会把内容全部输出,同时会打印匹配的一行
1.3 sed -n '/master-host/,/port/p' my.cnf
输出:
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
port = 3306
含义:表示打印输出 在master-host和port所确定的之间的行将被打印出来
二、删除操作
2.1 sed '3d' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-password = 147852369
replicate-ignore-db = mysql
port = 3306
socket = /tmp/mysql.sock
含义:将第三行删除之后再输出。
2.2 sed '3,$d' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
含义:将第三行到未尾行之间的删除掉再打印出来。
2.3 sed '/port/d' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
socket = /tmp/mysql.sock
含义:查找到包含port 关键字的行,并将其删除掉再打印输出
三、替换操作 (s命令)
3.1 sed
'/master-host/,/port/s/$/**?VACA**/' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158**?VACA**
master-user = root**?VACA**
master-password = 147852369**?VACA**
replicate-ignore-db = mysql**?VACA**
port = 3306**?VACA**
socket = /tmp/mysql.sock
含义:这回我们的命令是s 即找到匹配的模式并将其替换过来。
查找位于master-host与port 之间的行,将其未尾用**?VACA** 替换掉!
3.2 sed -n 's/port/PORT/pg' my.cnf
输出:
PORT = 3306
含义:将所有匹配到的port行替换成指定的内容,并打印输出
四、多个编辑命令(类似的操作就与&&命令相似即同时操作两个以上的SHELL命令)
同时带多个命令去执行操作的
4.1 sed -e '1,3d' -e 's/port/PORT/'
my.cnf
输出结果:
master-password = 147852369
replicate-ignore-db = mysql
PORT = 3306
socket = /tmp/mysql.sock
含义:执行两个命令,第一个命令表示将1-3行删除 然后再执行第二个命令替换
五、从文件读入内容(r 命令)
创建一新文件newfile内容如下
Nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
命令:sed '/port/r newfile' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
port = 3306 #表示在指定的行后面追加一个新文件的内容进来
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
socket = /tmp/mysql.sock
含义:可以将一个外部的文件追加进来非常方便!
六、写入文件(w 命令)
命令:sed -n '/port/w newfile' my.cnf
输出:生成一个新文件newfile 其内容如下:
port = 3306
含义:在指定的文件内查找匹配到的行,然后将其保存输出到一个新文件中去!
七、追加命令(a)
命令:sed '/port/a ------>' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
port = 3306
------>
socket = /tmp/mysql.sock
含义:表示在port下一行追加内容进来
八、插入(i命令)
命令:sed '/port/i\--------->' my.cnf
输出:
[mysqld]
master-host = 19.2.178.158
master-user = root
master-password = 147852369
replicate-ignore-db = mysql
--------->
port = 3306
socket = /tmp/mysql.sock
含义:在指定的匹配行前面插入指定的内容进来!