行编辑器sed

行编辑器sed

  Sed,grep,awk命令被称为文本编辑三剑客,目前学习了grep命令,sed命令 自我觉得sed命令更强大,排名第一,grep暂居第二,awk没学不太清楚。

  这次的博客写一下刚学习的sed命令,grep命令是全局搜索剪切,sed命令则是逐行进行处理,它一次处理一行内容Sed命令有两个空间,一个模式空间,一个保持空间。Sed命令处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾

  Sed用法:

Sed [option]… ‘script’ inputfile…

常用选项[option]:

 -n:不输出模式空间内容到屏幕,即不自动打印(sed命令处理后都会默认输出到屏幕,-n就可以不让输出,一般与p连用)

-e: 多点编辑 (与grep -e类似,支持)

-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本

-r: 支持使用扩展正则表达式

-i.bak: 备份文件并原处编辑

Script:地址命令

(1) 不给地址:对全文进行处理 【举例: sed ‘’ 文件名】

(2) 单地址:

#: 指定的行 【举例: sed ‘2p’ 文件名】

/pattern/:被此处模式所能够匹配到的每一行 【举例: sed ‘/redhat/’ 文件名】

(3) 地址范围:

#,# 【举例: sed ‘1,4p’ 文件名】

#,+# 【举例: sed ‘1,+1’ 文件名】

/pat1/,/pat2/ 【举例: sed ‘/linux/,/redhat/’】

#,/pat1/ 【举例: sed ‘3,/mage/’】

(4) ~:步进

1~2 奇数行【举例: sed ‘1~2p’ 文件名】

2~2 偶数行【举例: sed ‘2~2p’ 文件名

编辑命令:

d: 删除模式空间匹配的行 【举例: sed ‘2d’ 文件名】

p: 显示模式空间中的内容 【举例: sed ‘2p’ 文件名】

a [\]text:在指定行后面追加文本 支持使用\n实现多行追加【举例:sed ‘2a\123\n456’ 文件名】

i [\]text:在行前面插入文本 【举例:sed ‘2i\123\n456 ‘ 文件名】

c [\]text:替换行为单行或多行文本 【举例: sed ‘2c\123\n456’ 文件名】

w /path/somefile: 保存模式匹配的行至指定文件 【举例: sed -n ‘3w /root/3.file’ 文件名】

r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后 【举例:sed ‘3r /root/mage.txt’ 文件名】

=: 为模式空间中的行打印行号 【举例: sed ‘=’ pets.bak】

!:模式空间中匹配行取反处理【举例:sed -n ‘2!p’ pets】

Sed常用工具:

///:查找替换,支持使用其它分隔符,s@@@,s### v

替换标记

g: 行内全局替换 【举例: sed s/dog/cat/g 文件名】

p: 显示替换成功的行 【举例:sed s/dog/cat/p文件名 

w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中【举例:sed s/dog/cat/w /app/1.file 文件名

高级编辑命令:

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:读取匹配到的行的下一行追加至模式空间

d: 删除模式空间中的行

D:删除当前模式空间开端至\n的内容(不再传至标准输 出),放弃之后的命令,但是对剩余模式空间重新执行sed

**************************************************************************

Sed高级编辑命令示例:

sed -n ‘n;p’ FILE  显示偶数行

sed ‘1!G;h;$!d’ FILE  倒序显示

sed -n ‘1!G;h;$p’ 倒序显示

seq 7 |sed ‘n;d’ 显示奇数

sed  ‘N;D’ 显示最后一行

sed ‘$!d’  显示最后一行

sed ‘G’  每行之间加空行  

sed ‘g’  把每行内容替换成空行

sed ‘/^$/d;G’  确保每一行下面都有一个空行

***************************************************************************

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头 的行行首的空白字符 

cat /etc/grub2.cfg |sed -r ‘s/^[[:space:]]+//’

行编辑器sed

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空 白字符的行的行首的#和空白字符 

sed -r “/^#[[:space:]]/s/^#[[:space:]]+([^[:space:]])/\1/” fstab
sed -r ‘s/^#[[:space:]]+//’ fstab

行编辑器sed

行编辑器sed

3、在centos6系统/root/install.log每一行行首增加#号

sed ‘s/^/#/g’ /root/install.log 

行编辑器sed

4、在/etc/fstab文件中不以#开头的行的行首增加#号

cat /etc/fstab |sed  ‘s/^[^#]/#&/’

行编辑器sed

 5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

echo /etc/sysconfig/network-scripts/ |sed -r  ‘s#(^/.*/)([^/].*/?$)#a:\1#’

echo /etc/sysconfig/network-scripts/ |sed -r  ‘s#(^/.*/)([^/].*/?$)#\2#’ 

行编辑器sed

行编辑器sed

6、利用sed 取出ifconfig命令中本机的IPv4地址 

ifconfig eth0 |sed -n ‘2p’ |sed ‘s#^.*addr:##g’ |sed ‘s#  Bcas.*$##g’
ifconfig eth0 |sed  -n -e  ‘2s#^.*addr:##g’ -e ‘s#  Bcas.*$##gp’

行编辑器sed

7、统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数

ls /run/media/root/CentOS\ 7\ x86_64/Packages | sed -r ‘s#.*\.(.*)\.rpm#\1#’|sort|uniq -c

行编辑器sed

8、统计/etc/init.d/functions文件中每个单词的出现次数, 并排序(用grep和sed两种方法分别实现)

sed ‘s/[^[:alpha:]]/\n/g’ /etc/init.d/functions |tr -s “\n”|sort|uniq -c|sort -n
egrep -o “[[:alpha:]]+” /etc/init.d/functions |sort|uniq -c|sort -n 

行编辑器sed

行编辑器sed

9、将文本文件的n和n+1行合并为一行,n为奇数行

sed ‘N;s/\n//’ zz.txt

行编辑器sed

原创文章,作者:Ganten,如若转载,请注明出处:http://www.178linux.com/85426

(0)
GantenGanten
上一篇 2017-08-26
下一篇 2017-08-26

相关推荐

  • 网络实验

    一、子网划分 1、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为? 使用27位子网掩码一共可以分出8个子网 每段32个地址;每个子网有30个可用地址 0-31 32-63 64-95 96-127 128-159 160-191 192-223 224-255 2、一家集团…

    Linux干货 2016-09-09
  • 第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;        (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [ro…

    2017-04-05
  • 带你走进PI的世界-Raspbian Pi上实现LAMP

     初识   Raspbian PI                   前段时间,出于兴趣,入手一个树莓派(Raspbian PI…

    Linux干货 2016-01-05
  • VMware vSphere所需要开放的端口

        80 vCenter Server需要端口80用于直接HTTP连接。端口80会将请求重定向到HTTPS端口443。如果意外使用了http://server而不是https://server,此端口将非常有用。     389 此端口在vCenter Server的本地和所…

    Linux干货 2016-07-07
  • 逻辑卷

    §·逻辑卷管理器LVM介绍 ※·LVM逻辑卷的简单描述 lvm(logical volume manager 逻辑卷管理器)的可以弹性的调整文件系统的容量,支持任何块设备,需要使用dm模块:device mapper设备映射,将一个或多个底层设备组织成一个逻辑设备的模块。 lvm的重点在于弹性的调整文件系统的容量,而并非在于数据的存储效率及安全上面…

    Linux干货 2016-08-30
  • 第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 一次通信加密过程: 发送方: 1.使用单向加密算法提取生成数据特征码; 2.使用自己的私钥加密特征码附加在数据后面; 3.生成用于对称加密的临时密钥; 4.用此临时密钥加密数据和已经使用私钥加密后的特征码; 5.使用接受方的公钥加密此临时密钥,附加在对称密钥后的数据后方; 接受方: 1.使用自己的私钥解密加密的…

    2017-10-02