Linux三剑客---sed

sed:Linux三剑客之一(awk-sed-grep)

1、sed功能:操作、过滤和转换文本内容的强大工具

​ 常用功能:增删改查、过滤、改行

(1)查看sed版本: sed --version
(2)语法格式:sed [options] [sed-commands] [input-file]
(3)查看sed用法:man sed
(4)sed模式空间:sed软件内部的一个临时缓存,用于存放读取到的内容
注意事项:
a、sed和后面的选项间都有空格
b、sed-commands既可以是单个sed命令,也可以是多个sed命令的组合
c、执行流程:sed软件是从文件或管道中读取一行,操作一行,一行一行的处理,直到文本结束

2、sed操作:

-i :修改文件内容,若不加文件内容不会改变

增删改查:
增:
(1)增加新行
    a 追加文本到指定的行后
    i 插入文本到指定的行前
    单行增加    
    如:sed '2a awswdacwxw' file2   在第二行后增加内容为“awswdscwxw”的新行
        sed '2i abcdefg' file2      在第二行前增加内容为“abcdefg”的新行
    多行增加
    如:sed '2a abc\ndef' file2  若增加多行须在各行间增加 \n
    注:此时不会修改文件
 (2)通过地址范围操作:(增删都适用)
     用法: n1,n2{sed-commands}  地址用逗号分隔,n1,n2可以是数字、正则表达式或者二者组合
     10{sed-commands}         对第10行操作
     10,20{sed-commands}     对10到20行操作,包括第10,20行
     10,+20{sed-commands}    对第10到30(10+20)行操作,包括第10,30行
     1~2{sed-commands}        对1,3,5,7,9....行进行操作  ~数字:指定步长
     10,${sed-commands}      对第10行到最后一行进行操作($代表最后一行)
     /old/{sed-commands}      对匹配old的行操作
     /begin/,/end/{sed-commands}  对第一次匹配begin的行开始到匹配到第一次匹配end的行之间的行进行操作
     /begin/,10{sed-commands}  从第一次匹配到begin的行开始到第10行进行操作
删:
(1)d 删除指定的行
(2)删除全部行 : sed "d" filename
    注:增加时的特殊含义在此处也可以用
    如:sed "1~2d" filename 删除奇数行
       sed  "1,+2d" filename 删除第1-3行
    企业案列:打印文件内容但不包括old的行
    # sed "/old/d" filename
改:
  (1) c 用新行取代旧行
 (2)文本替换
     s单独使用,会把匹配行的第一项匹配的更换掉,代表行
     g全局参数,每行或全文所有匹配的都替换,全局替换参数
     Ng参数,查找此行记录匹配的第N项
     使用方式:
     sed -i 's/one/two/g' filename
     sed -i 's#one#two#g' filename
  企业案列1:精确修改对应行的文件内容
      # sed '3s#one#two#' filename  将第三行的one改为two
  (3)分组替换  \(pattern\)和\1的使用说明
   \(pattern\) :用于匹配字串 \1 \2 ...用来引用第几个匹配的字串,最多支持九个 (\9)
     &:存储前面匹配的字串
     -r代表使用扩展则很扩展正则表达式(此时特殊符号不许转义)
     案列:
     (1)# echo 'this is digit 7 in a number'|sed 's/digit \([0-9]\)/\1/'
     输出 this is 7 in a number
     (2)匹配单词 : \([a-zA-Z]\+\)  注:+号还需转义
  (4)特殊符号 & 代表被替换的内容
  如: sed '1,3s#one#----&----#g' filename    ----> 注:此处 &代表one
  twoone替换后结果-----> two----one----
  企业案列:批量重命名文件
  ^.* 以任意字符开头的行
   ls *jpg|sed -r 'S#(^.*)_fined.*#mv & \1.jpg#g'|bash
查:
  (1)p 输出指定内容,但默认会输出2次匹配的结果,所以需结合 -n 选项去除重复输出
     -n 输出指定行(不加会输出全部文件内容,匹配行输出两次)

3、sed安全修改

# sed -i.bak 'options' filename  //sed修改前先为原先的文件准备备份文件filename.bak

4、“=”用于输出行号

用法: /pattern/=
如:sed -i '/pattern/='

5、特殊地

test.txt    wangqixaun
sed -i '/^wang/s#qixuan#QIXUAN#g' test.txt
注: 此时 /^wang/s  含义:在以 wang 开头的行进行操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>