1.sed行编辑器
SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。
sed全称是:Stream EDitor
调用sed命令有两种形式:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
sed工作机制
sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“保持空间(hold space)这2个空间的使用。
模式空间:类似于快照,数据之间在它上面进行处理,但不影响原数据。
保持空间:数据的暂存区域
正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!
sed在正常情况下,将处理的行读入模式空间,脚本中的sed command
(sed命令)就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。
2.sed基本命令
(1)显示:p命令
命令 | 说明 |
---|---|
sed ‘/#/p‘ zxyos | 显示含有#的行(不屏蔽模式空间) |
(2)屏蔽模式空间中的内容(只显示符合要求的行):-n命令
命令 | 说明 |
---|---|
sed -n ‘/#/p‘ zxyos | 显示含有#的行(屏蔽模式空间) |
sed -n ‘/#/!p‘ zxyos | 不显示含有#的行(屏蔽模式空间) |
sed -n ‘2p‘ zxyos | 显示第2行(屏蔽模式空间) |
sed -n ‘2,5p‘ zxyos | 显示2至5行(屏蔽模式空间) |
sed -n ‘2p;5p‘ zxyos | 显示第2行和第5行(屏蔽模式空间) |
练习:只显示ifconfig eth0
命令的ip
(3)删除:d命令
命令 | 说明 |
---|---|
sed '1,3d' zxyos | 删除1到3行 |
sed '1d;3d' zxyos | 删除第1行,第3行 |
sed '1,7d' zxyos | 删除1到7行 |
sed '1,7!d' zxyos | 1到7行不删除,删除其他 |
sed '/^UID/d' zxyos | 删除以UID开头的行 |
sed -n '/^UID/d' zxyos | |
sed '/^UID/!d' zxyos | 不删除以UID开头的行,删除其他 |
sed '/^$/d' zxyos | 删除空行 |
sed '/^$/!d' zxyos | 不删除空行 |
(4)添加(指定行后添加):a命令
命令 | 说明 |
---|---|
sed '/^UID/ahello jay' zxyos | 在以UID开头的行后添加hello jay |
sed '/^UID/a\hello jay' zxyos | 在以UID开头的行后添加hello jay |
sed '/^UID/ahello\njay' zxyos | 在以UID开头的行后添加hello换行添加jay |
sed '/^UID/a\hello\njay' zxyos | 在以UID开头的行后添加hello换行添加jay |
(5)插入(指定行前添加):i命令
命令 | 说明 |
---|---|
sed '/^UID/i\hello jay' zxyos | 在以UID开头的行前添加hello jay |
sed '/^UID/i\hello\njay' zxyos | 在以UID开头的行前添加hello换行添加jay |
(6)替换修改:c命令
命令 | 说明 |
---|---|
sed '/^$/c\hi zxyos' zxyos | 将空行修改为 hi zxyos |
sed '/^#/c\wow' zxyos | 以#开头的行修改为wow |
(7)写入:w命令
命令 | 说明 |
---|---|
sed '/^GID/w /mnt/xinos' zxyos | 把zxyos文件以GID开头的行写入/mnt/xinos文件(会回显zxyos文件内容) |
sed -n '/^UID/w /mnt/xinos' zxyos | 把zxyos文件以UID开头的行写入/mnt/xinos文件(不回显zxyos文件内容) |
(8)显示行号:=命令
命令 | 说明 |
---|---|
sed '/^#/=' zxyos > zxyos1 | zxyos文件中以#开头的行显示行号导入zxyos1文件中 |
sed '/^#/=' zxyos -i zxyos1 | zxyos文件中以#开头的行显示行号导入zxyos1文件中(不覆盖) |
sed '6r /mnt/xinos' zxyos | 将/mnt/xinos文件的内容加到zxyos文件的第6行 |
sed '/^#/=' zxyos > zxyos | 清空zxyos文件 |
(9)替换:s命令
命令 | 说明 |
---|---|
sed 's/0/zero/g' zxyos | 所有的0替换成zero |
sed 's@0@zero@g' zxyos | 所有的0替换成zero |
sed '1,4s/0/####/g' zxyos | 1到4行的0替换为#### |
sed '4s/0/####/g' zxyos | 第4行的0替换为#### |
sed 's/\//&&&/g' zxyos | 将/替换为&&& |
sed '/#1/,/#4/s/255/999/g' zxyos | 含有#1到含有#4的行中255替换为999 |
'@‘的作用与’/'相同
(10)sed-其他用法
命令 | 说明 |
---|---|
sed -n '/^UID/=' zxyos | 显示以UID开头的行的行号 |
sed -n -e '/^UID/p' -e '/^GID/=' zxyos | 显示以UID开头的行和以GID开头的行的行号 |
sed -n '/^UID/p;/^GID/=' zxyos | 显示以UID开头的行和以GID开头的行的行号 |
sed -e '/^UID/p;/^GID/=' zxyos | 显示以UID开头的行和以GID开头的行的行号(不屏蔽模式空间) |
sed '/^UID/p;/^GID/=' zxyos | 显示以UID开头的行和以GID开头的行的行号(不屏蔽模式空间) |
sed -f file zxyos | 将命令写入file文件,逐一运行file文件中的命令 |
sed 'G' zxyos | 每行后(下一行)加空行 |
sed '$!G' zxyos | 每行后加空行,最后一行后不加空行 |
sed '=' zxyos | 每行显示行号(显示在每行的上一行) |
sed '=' zxyos | sed 'N;s/\n/ /' | 在每行行首显示行号(N提前预加载下一行的内容) |
sed '=' zxyos | sed 'N;s/\n/ /g' | 在每行行首显示行号(N提前预加载下一行的内容) |
sed -n '$p' zxyos | 显示最后1行 |
N提前预加载下一行的内容
‘-e’的作用与’;'等效,是语句间的分隔符
sed -n '$p' zxyos
等效于tail -n 1 zxyos
显示最后1行