9.sed文本处理工具

sed

1.sed处理文本的工具

  1. stream editor ,行编辑器
  2. sed是一种流编辑器,它一次性处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使筑如‘D’的特殊命令,那么在两个循环之间清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出
  3. 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转化程序等
  4. 参考:http://www.gnu.org/software/sed/manual/sed.html

2.sed工具

  1. 用法:
    sed [option]… ‘script’ inputfile…
  2. 常用选项
    -n:不输出模式空间内容到屏幕,即不会自动打印
    -e: 多点编辑
    -f: /path/script_file :从指定文件中读取编辑脚本
    -r: 支持使用正则表达式
    -i.bak : 备份文件并原处编辑
  3. script:
    ‘地址命令’
  4. 地址定界:
    (1)不给地址:对全文进行处理
    (2)单地址:
    #:指定的行,$:最后一行
    /pattern/:被此处模式所能够匹配到的每一行
    (3)地址范围:
    #,#
    #,+#
    /pat1/,/pat2/
    #,/pat1/
    (4)~:步进
    1~2奇数行
    2~2偶数行
  5. 编辑命令:
    d: 删除模式空间匹配的行,并立即启用下一轮循环
    p: 打印当前模式空间内容,追加到默认输出之后
    a []text :在指定行后面追加文本
    支持使用\n实现多行追加
    i[]text:在行前面插入文本
    c[]text:替换行为单行或多行文本
    w /path/somefile:保存模式匹配的行至指定文件
    r /path/somefile:读取指定文件的文本至模式空间中匹配到行后
    = 为模式空间中的行打印行号
    ! 模式空间中匹配行取反处理
  6. s///:查找替换,支持使用其他分隔符,s@@@,s###
  7. 替换标记
    g: 行内全局替换
    p: 显示替换成功的行
    w /path/to/somefile: 将替换成功的行保存至文件中

3.sed示例:

sed '2p' /etc/passwd
sed -n '2p' /etc/passwd
sed -n  '1,4p' etc/passwd
sed -n '2,/root/p' etc/passwd
sed -n -e '/^$/=' file 显示空行行号
sed -n -e '/^$/p' -e '/^/=' file
sed '/root/a\superman' /etc/passwd行后
sed '/root/i\superman' /etc/passwd行前
sed '/root/c\superman' /etc/passwd代替行
sed '/^$/d' file
sed '1,10d' file
nl /etc/passwd  | sed '2,5d'
nl /etc/passwd  | sed '2a tea'
sed 's/test/mytest/g' example
sed -n 's/root/&superman/p' /etc.passwd 单词前
sed -n 's/root/superman&/p' /etc.passwd 单词后
sed  -e 's/dog/cat/' -e 's/hi/lo/' pets
sed -i.bak  's/dog/cat/g' pets


建议使用单引号
sed -n '2,5p' /etc/passwd
sed -n '2,+3p' /etc/passwd
sed -n '/^b/,/^f/p' /etc/passwd
sed '2!d' f1
sed '2,sa\   =====' f1
sed -i.bak '/aliases/aalias p=poweroff' .bashrc
sed '2,5w f2' f1
sed '/User/r sed.txt'  .bashrc
sed 's/root/administrator/g' /etc/passwd
sed -r 's/(root)/\1er/g' /etc/passwd
sed -r 's/(root)/admin\1/g' /etc/passwd
sed -r 's/(.*)/\1mage/g' /etc/passwd
sed -r 's/(.*)/mage\1/g' /etc/passwd
sed  -r 's@/bin/bash$@/sbin/bash@' /etc/passwd
sed  -r 's@/(bin/bash)$@/s\1@' /etc/passwd
sed -r 's/(GRUB_CMD(.*)"$/\1 xyz/' /etc/default/grub

ifconfig ens33 | sed -r '2!d;s/inet(.*) net.*/\1/'
sed '/^#NameVirtualHost/s/#// /etc/httpd/conf/httpd.conf 
sed '/^<VirtualHost/,/^#<\/VirtualHost/s/#// /etc/httpd/conf/httpd.conf 
echo  "/etc/sysconfig/network"  | sed  -r 's/(.*\/)([^/]+\/?)/\1/'

sed -n  -r  -i.bak -f file 'script' file
script: 'addcmd'
cmd:p,d,a,i,c,w,r =,

4.sed高级编辑命令

1)P:打印模式空间开端至\n内容,并追加到默认输出之前
2)h: 把模式空间中的内容覆盖至保存空间中
3)H:把模式空间中的内容追加至保持空间中
4)g: 从保持空间取出数据覆盖至模式空间
5)G:从保持空间取出数据追加至模式空间
6)x:把模式空间中的内容与保持空间中的内容进行互换
7)n:读取匹配到的行的下一行覆盖至模式空间
8)N:读取匹配到的行的下一行追加至模式空间
9)d:删除模式空间中的行
10)D:如果模式空间包含换行符,则删除直到第一个换行符模式空间中的文本,并不包含换行符,则会像发出d命令那样启动正常的新循环

5.sed示例

sed -n 'n;p' file
sed -'1!G;h;$!d; file
sed 'N;D ' file
sed;$!N;$!D; file
sed ;$!d' file
sed 'G' file
sed 'g' file
sed '/^$/d;G' file
sed 'n;d' file
sed -n '1!G;h;$p' file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值