加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux-shell脚本命令:sed命令简介 - Linux系统

发布时间:2014-12-04 23:37:08 所属栏目:Linux 来源:站长网
导读:[ sed简介: ] sed是一个很好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 可以用于对数据行进行新增、选
[ sed简介: ]

sed是一个很好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 可以用于对数据行进行新增、选取、替换、删除等操作。

sed命令行格式:sed [-nefri] 'range command' file

如: sed '2d' aaa.txt # 删除文件aaa.txt中第二行

[ sed工作流程: ]

使用vim这种屏幕编辑器编辑一个文件的时候, 我们需要把这个文件打开, 这里存在两个问题:

1. 打开一个比较大的文件会消耗很多内存。

2. 我们无法写脚本调用vim来编辑文件, 但是sed可以通过写脚本编辑文件。

sed属于流编辑器, 它在编辑文件的时候, 首先会把文件的一行内容读入内存,读入内存的部分, 称为模式空间; 然后根据我们的需要进行编辑,

编辑完后会把模式空间的内容输出到屏幕, 并把它里面的内容清空, 再读取下一行到模式空间, 这样的话就避免了一次性读取整个文件。

[ sed常用选项: ]

-n: 只会显示模式空间里的内容, 而不会显示没有编辑过的内容。

-e: 直接在指令列模式上进行 sed 的动作编辑;

-f: 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r: sed 的动作支援的是延伸型正规表示法的语法。( 预设是基础正规表示法语法 )

-i: 直接修改读取的档案内容, 而不是由屏幕输出。

[ sed常用命令: ]

d: 删除, 因为是删除, 所以 d 后面通常不接任何东西;

s: 替代, 可以直接进行替换的工作, 通常这个 s 的动作可以搭配正规表示法;

a: 追加, a 的后面可以接字符串, 而这些字符串会在新的一行出现(目前的下一行);

i: 插入, i 的后面可以接字符串, 而这些字符串会在新的一行出现(目前的上一行);

c: 取代, c 的后面可以接字符串, 这些字符串可以取代一行内容;

[ 常用命令举例: ]

## 删除操作 d : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

range是范围, 删除操作有两种方法表示:

① 直接写一个数字, 表示对多少行进行操作. sed '2d' aaa.txt #表示删除文件aaa.txt中第二行

② 使用正则表达式, 此时必须要使用两个反斜杠 // 隔开. sed '/^Tom/d' aaa.txt # 表示删除aaa.txt中以Tom开头的行

* 如果没有指定范围, 则会对全文进行操纵. sed 'd' aaa.txt # 表示删除aaa.txt中所有的行

1. sed '$d' aaa.txt # 删除aaa.txt中最后一行 (对单行进行操作)

2. sed '7,9d' aaa.txt # 删除文件aaa.txt中第七行到第九行 (对多行进行操作)

3. sed '/aaa/,/bbb/d' aaa.txt # 删除文件aaa.txt中含有aaa至含有bbb之间所有的行 (对多行进行操作)

返回栏目页:http://www.bianceng.cn/OS/Linux/

## 替代操作 s : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

替换格式: sed 'range s/orig/new/sign' file # 如果没有指定范围的话, 将会对全文进行操作.

1. sed 's/aaa/bbb/' ccc.txt # 将ccc.txt全文中每行的第一个关键字 aaa 替换成 bbb, 因为我们没有指定任何模式

2. sed 's/aaa/bbb/g' ccc.txt # 将ccc.txt全文中所有 aaa 替换成 bbb, 因为我们加了sign: g

3. sed 's/aaa/bbb/2' ccc.txt # 将ccc.txt全文中每行第二个 aaa 替换成 bbb, 因为我们加了sign: 2

4. sed '1s/aaa/bbb/g' ccc.txt # 将ccc.txt全文中第一行所有 aaa 替换成 bbb, 因为我们加了range: 1, 加了sign: g

5. 上面示例也可以用其他字符隔开(只有替换有): sed 's#aaa#bbb#' ccc.txt

6. old位置支持正则, 但在new位置不支持正则, 除了字符 n &

sed '1s/a/N&N/2' ccc.txt # 将ccc.txt全文中第一行第二个 a 替换成NaN, & 相当于对前面 a 的引用

7. 对特定的范围做多个操作, 那么我们要把多个操作用 { } 括起来, 用 ; 隔开多个命令.

sed '1{s/a/b/g; s/b/c

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读