likes
comments
collection
share

linux三剑客之编辑器sed出厂

作者站长头像
站长
· 阅读数 21

sed

  • linux三剑客grep、sed、awk 。不知道你了解多少?今天我们来聊聊三剑客之一的sed。
  • 我们可以将sed理解成一种编辑器。sed只是针对文件进行编辑并将结果输出在终端。整个过程对源文件是不会做任何修改的。所以sed在某种程度上来说可以说是没有破坏性的。但是sed又提供重定向来保存结果,这个操作有可能破坏源文件。

语法结构

参考

参考2

命令模式

 sed [option] 'sed command' filename

脚本模式

 sed [option] -f 'sed script' filename

option列表

参数含义
-n仅将匹配的行打印出来
-e命令模式编辑内容,不影响源文件
-f将sed命令提前写在文件中。-f进行加载
--follow-symlinks直接修改文件时跟随软链接
-r支持扩展模式 ; 同grep -E
-i修改源文件内容。如果需要备份则-i "filename"表示备份到filename文件
-a新增,在指定行后新增数据

linux三剑客之编辑器sed出厂

  • 通过图中我们能够看出来-e模式针对文本进行修改只是针对终端的。上面我们文本内容为hello。 -e模式先将hello修改为zxh,然后在修改为nihao。但是源文件并没有修改
  • 上面是sed的命令参数。在命令参数比如-i , -a需要编辑数据时,sed还提供了定位功能。下面我们简称编辑命令。
编辑命令事例功能
ased '3a\content' demo.txt或者sed '$a\content' demo.txt指定行后增加内容;3a表示第三行,$a最后一行。在ma c中\后面需要换行。
ised '3i\content' demo.txt指定行之前新增内容
csed '3c\hello' demo.txt修改指定行
dsed '/number 1/,/number 3/d' data.txt删除文本流中的特定行
nsed '/content/n' demo.txt移动到选中的下一行
psed -n '2p' demo.txt打印数据。-n禁止,p 结合使用输出匹配行
ssed '2,$s/dog/cat/' demo.txt将内容替换成新内容
gsed 's/dog/cat/g'demo.txt也是替换内容。全局替换 s前指定范围。g全局
ysed 'y/abc/ABC'demo.txt唯一可以处理单个字符的sed编辑器命令a-A,b-B,c-C
wsed '1,2w test.txt' demo.txtwrite 。将流内容写出到指定文件中 ; 将demo.txt1,2行数据写入test.txt
rsed '1,2r test.txt' demo.txtread。将文件内容读到流中
lsed -n 'l' demo.txt列表显示
=sed -n '=' demo.txt打印行号
{}sed -n '{=;s/dog/cat/g;p}'组合扩展;分号切割
  • 在mac中我们使用编辑模式新增内容时需要如下操作

a

linux三剑客之编辑器sed出厂

i

linux三剑客之编辑器sed出厂

c

linux三剑客之编辑器sed出厂

d

linux三剑客之编辑器sed出厂

l

linux三剑客之编辑器sed出厂

{}

linux三剑客之编辑器sed出厂

n

linux三剑客之编辑器sed出厂

常用脚本

查询文本中是否包含某内容

 echo /bin/bashtesth | sed -n '%/bin/bash% p'

正则查找某内容

 echo helloworld | sed -n '/^hell/ p'
 echo helloworld | sed -n '/ld$/ p'

查找2,4行数据

 cat demo.txt | sed -n '2,4p'

正则匹配

  • 作为新手的我总感觉Linux中的正则和Java中正则有点不太一样。Linux里正则用着不是很舒服。.*^${}+?|()这些和java一样都是特殊字符。
  • java中匹配所有事.*而Linux中.直接就可以匹配所有
  • [] 匹配指定范围内任意字符
  • [^] 匹配出指定范围外任意字符
  • echo 12345 | sed -n '/[0-9]+/p'这个并不能匹配;echo 12345|sed -n '/[0-9][0-9][0-9][0-9][0-9]/p'可以匹配。这是因为sed和grep一样需要-E 开启扩展正则echo 12345 | sed -n =E '/[0-9]+/p'
特殊含义解释
[[:alpha:]]匹配任意字母字符,不管是大写还是小写(等价于[a-zA-Z])
[[:alnum:]]匹配任意字母数字字符09、AZ或a~z(等价于A-Za-z0-9)
[[:blank:]]匹配空格或制表符
[[:digit:]]匹配0~9之间的数字(等价于[0-9])
[[:lower:]]匹配小写字母字符a~z(等价于[a-z])
[[:print:]]匹配任意可打印字符
[[:punct:]]匹配标点符号
[[:space:]]匹配任意空白字符:空格、制表符、NL、FF、VT和CR
[[:upper:]]匹配任意大写字母字符A~Z(等价于[A-Z])

三剑客还剩下一位grep ; 江湖有缘再见

转载自:https://juejin.cn/post/7114829129656041509
评论
请登录