持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
sed
- linux三剑客grep、sed、awk 。不知道你了解多少?今天我们来聊聊三剑客之一的sed。
- 我们可以将sed理解成一种编辑器。sed只是针对文件进行编辑并将结果输出在终端。整个过程对源文件是不会做任何修改的。所以sed在某种程度上来说可以说是没有破坏性的。但是sed又提供重定向来保存结果,这个操作有可能破坏源文件。
语法结构
命令模式
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 | 新增,在指定行后新增数据 |
- 通过图中我们能够看出来-e模式针对文本进行修改只是针对终端的。上面我们文本内容为hello。 -e模式先将hello修改为zxh,然后在修改为nihao。但是源文件并没有修改
- 上面是sed的命令参数。在命令参数比如-i , -a需要编辑数据时,sed还提供了定位功能。下面我们简称编辑命令。
编辑命令 | 事例 | 功能 |
---|---|---|
a | sed '3a\content' demo.txt 或者sed '$a\content' demo.txt |
指定行后增加内容;3a表示第三行,$a最后一行。在ma c中\后面需要换行。 |
i | sed '3i\content' demo.txt |
指定行之前新增内容 |
c | sed '3c\hello' demo.txt |
修改指定行 |
d | sed '/number 1/,/number 3/d' data.txt |
删除文本流中的特定行 |
n | sed '/content/n' demo.txt |
移动到选中的下一行 |
p | sed -n '2p' demo.txt |
打印数据。-n禁止,p 结合使用输出匹配行 |
s | sed '2,$s/dog/cat/' demo.txt |
将内容替换成新内容 |
g | sed 's/dog/cat/g'demo.txt |
也是替换内容。全局替换 s前指定范围。g全局 |
y | sed 'y/abc/ABC'demo.txt |
唯一可以处理单个字符的sed编辑器命令a-A,b-B,c-C |
w | sed '1,2w test.txt' demo.txt |
write 。将流内容写出到指定文件中 ; 将demo.txt1,2行数据写入test.txt |
r | sed '1,2r test.txt' demo.txt |
read。将文件内容读到流中 |
l | sed -n 'l' demo.txt |
列表显示 |
= | sed -n '=' demo.txt |
打印行号 |
{} | sed -n '{=;s/dog/cat/g;p}' |
组合扩展;分号切割 |
- 在mac中我们使用编辑模式新增内容时需要如下操作
a
i
c
d
l
{}
n
常用脚本
查询文本中是否包含某内容
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:]] | 匹配任意字母数字字符0 |
[[:blank:]] | 匹配空格或制表符 |
[[:digit:]] | 匹配0~9之间的数字(等价于[0-9]) |
[[:lower:]] | 匹配小写字母字符a~z(等价于[a-z]) |
[[:print:]] | 匹配任意可打印字符 |
[[:punct:]] | 匹配标点符号 |
[[:space:]] | 匹配任意空白字符:空格、制表符、NL、FF、VT和CR |
[[:upper:]] | 匹配任意大写字母字符A~Z(等价于[A-Z]) |
三剑客还剩下一位grep ; 江湖有缘再见
今天的文章linux三剑客之编辑器sed出厂分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/22891.html