找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux 命令之sed

2019-3-22 18:42| 发布者: admin| 查看: 1074| 评论: 0

摘要: sed 是Linux下一项流处理编辑器工具,具有以下特征行处理一次只处理一行数据 (sed处理文件内容的核心思想)不改变文件内容(除非重定向)命令行格式sed 'command' file(s)脚本格式sed -f scriptfile file(s)sed 命 ...

sed 是Linux下一项流处理编辑器工具,具有以下特征


  • 行处理一次只处理一行数据 (sed处理文件内容的核心思想)

  • 不改变文件内容(除非重定向)
命令行格式
sed [option] 'command' file(s)
脚本格式
sed -f scriptfile file(s)
sed 命令
p 打印命令
-n 只打印匹配的行
定位一行
sed -n '2p' test.txt
定位多行
sed -n '2,5p' test.txt
// (2和5也可以用正则代替)
定位反向选择
sed -n '2,5!p' test.txt // 第2-5行不被选择
定位间隔几行
sed -n '2~2p' test.txt // 间隔输出
行命令

  • a (新增行)/ i(插入行)

  • c(替代行)

  • d(删除行)
linux 用法
sed -n "2a text2++" test.txt
sed -n "2,5a text2++" test.txt
mac os 用法
sed -n "2a \
text2++
" test.txt

sed -n "2,5a \
text2++
" test.txt
替换命令 s - sed命令的核心

基本命令
sed 's/search/replace' filename (每行替换一次)

全局替换
sed 's/search/replace/g' filename

eg:获取本机IP地址
ifconfig en0 | sed -n '/inet /p' | sed 's/inet //' | sed 's/netmask.*$//'


sed高级命令


假设有如下文本 test.txt


  • {} : 多个sed命令,用;分开
# 删除1,2行,并将5替换为12
sed "{1,2d;s/5/12/}" test.txt




  • n 读取下一个输入行,用下一个命令处理
隔行输出 与 sed -n '2~2p' test.txt 效果相同
sed -n "{n;p}" // 打印偶数行
sed -n "{p;n}" // 打印奇数行






  • & 替换固定字符串
sed 's/[a-z]\+/&-/' test.txt
// &符号代替了前面的正则表达式匹配到的内容




  • u/l/U/l 大小写转换

    • u 首字母大些

    • l 首字母小写

    • U 单词大写

    • L 单词小写
sed 's/[a-z]\+/\u&/' test.txt




  • () 获取匹配的内容
# 获取文件中的所有小写字符
sed 's/\([a-z]\+\).*$/\1/' test.txt
# 获取本机ip
ifconfig en0 | sed -n '/inet /p' | sed 's/inet \([0-9.]\+\) .*$/\1/'






  • r 复制指定文件到匹配行

  • w 复制匹配行到指定文件

再添加一个测试文件123.txt





把test.txt文件内容写到123.txt中,如果需要指定行,在w前加行号

attention: w 会改写文件,使用是应慎重




  • q 退出sed

第5行后退出sed



sed 还有一个重要的选项 -i: 直接修改读取的文件内容,而不是输出到终端
sed -i 's/5/13/' test.txt




更多用法请查看 gnu sed 官方文档


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:爱吃素的程序猿,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了