sed notes
文章目录
windows sed 类似工具
参考:
Cheat Sheet
多行处理
范围表示
- "3,4a hello"
"3,$a hello"
- $ –> 到行尾
insert 前面插入
- sed -e "3i hello"
append 后面追加
- sed -e "3a hello"
delete 删除
- sed -e "3,5d"
change 修改
- sed -e "3c hello" –> 修改成 hello
print 打印输出
- sed -n "3,4p" —> 与 -n 连用
单行编辑
简单替换
- sed -e "s/root/my-name/"
替换次数
- sed -e "s/root/my-name/3"
全局替换
- sed -e "s/root/my-name/3g"
支持正则 regex
- echo "home/demo.ZIP" | sed -e "s\.ZIP$/.zip/3g"
注意
- 有独有的正则语法
制定操作行
- sed -e "3,10 s/root/my-name/g" —> 默认是所有行
数据搜索 和 操纵
搜索 + 输出
- sed -n "/root/p" –> 注意 -n 和 p
搜索 + 删除
- sed -e "/root/d"
搜索 + 替换
- sed -e "s/root/my-name/g"
嵌套操作: 多重操作
nl etc/passwd | sed -n '/root/{s/bash/blueshell;p;q}'
- 注意: "{}" ";" "q"
Tutorial
sed
- stream editor 流 编辑器
格式
| |
[文本文件]
- 要处理的文件
选项
-e <script>
- 要执行的脚本
-f <stript file>
- 制定要执行的脚本所在的文件
-h
- –help
- 帮助
-n
- –quiet
- –silent
- 静默模式
脚本程序
脚本动作
i
- insert 插入
语法
在给定行之前 插入文本
1"3i hello" 在第三行之前插入 "hello"
a
- append 追加
- 最佳内容
可以后跟 "\", 进行分割,这里 \ 无意义,不会被输出
从第一个非空格的字符开始算起
"3a hello", "3a hello", "3a\hello"
- 它们表示的都是一个意思:追加 "hello"
语法
有效添加文本:从非空格开始的文本
1 2 3"3a hello" # 添加 "hello" 到 第三行的后面, 注意:省略了空格 "3ahello" # 相同意思 "3a\hello" # 相同意思
d
- delete 删除
语法
1 2 3 4 5 62d # 删除第二行 2,3d # 删除 2, 3 行 3,$d # 删除 第3行到结尾 2-5d # 删除 2 至 5 行 ----> Warning: 测试结果,语法错误 2,5d # 删除 2 至 5 行
c
- change 修改
语法
修改给定行 成为 设置的内容
注意:使用 “,” 表示范围
1 2 3 4 5"3c demo" # 把 第三行 修改成 "demo" "3,5c demo" # 把 3, 4, 5 行修改成 "demo", 注意: 这里是范围 sed -e "3,5c demo" file.txt
p
- print 打印
语法
打印制定行的内容
注意:
- 使用 "," 表示范围
与 -n 选项连用
1 2sed -n "4p" file.txt # 打印第四行 sed -n "4,7p" file.txt # 打印 4~7 行, 4, 5, 6, 7
s
- substitue 替换
语法
替换搜索到的内容
1 2 3"s/<to-replace>/<new-content>/g" # * 全局替换 nl /etc/passwd | sed "s/bash/hello-my-shell/g"注意:支持 regex
1 2# 删除 ^.*addr: /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
作用对象
留空
- eg: "s/root/my-root/"
- 默认行为,全部替换
/1, /2
- 数字形式
- 只替换第几次出现
- eg: "s/root/my-root/2"
/g
- 替换到最后
范围
- eg: "s/root/my-root/2g"
- 解说:从第二次到最后
指定 行数
1 2 3 4# 只替换第三行 sed '3 s/unix/linux/' geekfile.txt sed '3,5 s/unix/linux/' geekfile.txt # 3~5 sed '3,$ s/unix/linux/' geekfile.txt # 3~结尾注意
- 使用 "," 表示范围
和 p 操作连用
1 2 3sed "s/root/my-name/p" # 打印两次修改的行 sed -n "s/root/my-name/p" # 只输出 修改的行注意
独有的正则语法
regex 规则
- () –> \(\)
–> \ - {m, n} –> \{m, n\}
- [] –> [] 不变
- ? –> \?
- –> \+
- –> * 不变
- $ --> $ 不变
- \d –> \d
参考
q
- 退出 多个命令操作模式
数据搜寻 和 结果操作
语法
格式
1"/pattern/<maniulate-action>" # 格式
搜寻并打印
格式
1cat /etc/passwd | sed -n "/root/p" # 搜索并打印包含 root 的行- 注意: 和 -n 连用
搜寻并删除
1 2"/root/d" nl /etc/passwd | sed '/root/d'搜寻并替换
1nl /etc/passwd | sed 's/root/my-shell/'多个命令操作
1 2 3nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' # result: # 1 root:x:0:0:root:/root:/bin/blueshell注意
- 使用 ";" 分割操作
- "q"
- 退出
文章作者
上次更新 2023-02-10 (97c415e)