@1:sed basic usage:

  和AWK一样, sed也是逐行对文本进行处理. sed的主要功能如下:   

    @1:对每行中的匹配项进行处理(修改/删除)
    @2:格式化文本的处理
    @3:(行的增删改):整行(指定行或匹配行)替换/在指定位置(指定行或匹配行)添加整行文本/删除整行(指定行或匹配行)

#!/bin/bash
#File: sedDemo.sh
#Author: lxw
#Time: --
#Usage: Demonstration for sed. #NOTE: use " instead of ' in sed.
echo "Demo -----------------------"
sed "s/Chen Hao's/my/g" pets.txt echo "-i选项: 修改文件本身-----------------------"
sed -i "s/my/Chen Hao's/g" pets.txt echo "\<fish:以fish开头 -------------------------"
sed "s/\<fish/FISH/g" pets.txt
echo "sh\>:以sh结尾-------------------------"
sed "s/sh\>/SH/g" pets.txt echo "s匹配替换-----------------"
echo "第3行-------------------"
sed "3s/Chen/CHEN/g" pets.txt
echo "3-6行(既包括第3行,又包括第6行)-------------------"
sed "3,6s/Chen/CHEN/g" pets.txt
echo "i -> I: 每行的第一个i-------------------"
sed "s/i/I/1" pets.txt
echo "i -> I: 每行的第2个i(包括第2个i)以后的i --> 不是第2个字母-------------------"
sed "s/i/I/2g" pets.txt echo "多个s匹配-----------------"
sed "1,3s/Chen/CHEN/g; 5,10s/This/That/g" pets.txt
echo "上面的命令等价于这条命令--------------------"
sed -e "1,3s/Chen/CHEN/g" -e "5,10s/This/That/g" pets.txt
#sed -e "1,3s/Chen/CHEN/g" -e "5,$s/This/That/g" pets.txt #$字符的使用有点儿问题 echo "&字符的使用-------------------"
sed "s/Chen/[&]/g" pets.txt #圆括号括起来的正则表达式所匹配的字符串可以当成变量来使用,sed中使用的是\,\
echo "sed的格式化文本处理-----------"
sed "s/This is my \([^,]*\),.*is \(.*\)/---\1:\2---/g" my.txt echo "N命令: 只匹配奇数行---------------------------"
sed "N;s/my/your/" my.txt
echo "每两行和并为一行(例如:第一行和第二行合并,但第二行和第三行不合并)----"
sed "N;s/\n//" pets.txt #a命令和i命令
echo "第一行前面添加一行-----------------"
sed "1 i This is my monkey, my monkey's name is wukong" my.txt
echo "最后一行后面添加一行-----------------"
sed "$ a This is my monkey, my monkey's name is wukong" my.txt
echo "在匹配到/my/的行后面添加一行-----------------"
sed "/my/a This is my monkey, my monkey's name is wukong" my.txt #只要这一行中有匹配的字符串就会添加 echo "c命令: 整行替换,替换匹配行-----------------"
echo "替换第1行-----------------"
sed "1 c This is my monkey, my monkey's name is wukong" my.txt
echo "匹配到/fish/的行-----------------"
sed "/fish/c This is my monkey, my monkey's name is wukong" my.txt echo "d命令: 删除匹配行-----------------"
sed "1d" my.txt
echo "删除匹配到/fish/的行-----------------"
sed "/fish/d" my.txt
#sed "2,$d" my.txt #$字符的使用有点儿问题 echo "p命令: 打印匹配行----------------------"
echo "匹配fish并输出,fish行被输出了两遍,因为sed处理时会把处理的信息输出----"
sed "/fish/p" my.txt
echo "-n选项: 只输出匹配行------------------------"
sed -n "/fish/p" my.txt
echo "从cat到fish的行,而不仅仅是cat和fish行------------------------"
sed -n "/cat/,/fish/p" my.txt
echo "从第一行打印到匹配fish的行-------------------"
sed -n "1,/fish/p" my.txt
echo "+3表示后面连续3行------------------"
sed "/dog's/,+3s/^/# /g" pets.txt echo "对3行到第6行,执行命令/This/d---------"
sed "3,6{/This/d}" pets.txt
echo "对3行到第6行,匹配/This/成功后,再匹配/fish/,成功后执行d命令---------"
sed "3,6{/This/{/fish/d}}" pets.txt
echo "从第一行到最后一行,如果匹配到This,则删除之;如果前面有空格,则去除空格(tab不行,多个空格可以)----"
sed "1,10{/This/d; s/^ *//g}" pets.txt #NOTE: 用这个例子学习*的作用。

@2: sed 中的N命令

lxw@lxw-PC:~/lxw_Documents$ cat my.txt
This is my cat,my cat's name is betty
This is my dog,my dog's name is frank
This is my fish,my fish's name is george
This is my goat,my goat's name is adam
lxw@lxw-PC:~/lxw_Documents$ sed "s/my/your/" my.txt
This is your cat,my cat's name is betty
This is your dog,my dog's name is frank
This is your fish,my fish's name is george
This is your goat,my goat's name is adam
lxw@lxw-PC:~/lxw_Documents$ sed "s/my/your/g" my.txt
This is your cat,your cat's name is betty
This is your dog,your dog's name is frank
This is your fish,your fish's name is george
This is your goat,your goat's name is adam
lxw@lxw-PC:~/lxw_Documents$ sed "N;s/my/your/" my.txt
This is your cat,my cat's name is betty
This is my dog,my dog's name is frank
This is your fish,my fish's name is george
This is my goat,my goat's name is adam
lxw@lxw-PC:~/lxw_Documents$ sed "N;s/my/your/g" my.txt
This is your cat,your cat's name is betty
This is your dog,your dog's name is frank
This is your fish,your fish's name is george
This is your goat,your goat's name is adam

@3: 使用到的两个示例文件的内容如下:

my.txt

This is my cat,
my cat's name is betty
This is my dog,
my dog's name is frank
This is my fish,
my fish's name is george
This is my goat,
my goat's name is adam

pets.txt

This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam

Reference:

sed简明教程:http://coolshell.cn/articles/9104.html

最新文章

  1. Python第二模块(文件和函数)
  2. 如何使用java自定义注解?demo
  3. NoSQL之【MongoDB】学习(三):配置文件说明
  4. Yii源码阅读笔记(二十四)
  5. [转]jQuery Popup Login and Contact Form
  6. 【转】 iOS 开发之静态库.a和动态库详解 -- 不错
  7. 黄聪:发送键盘指令System.Windows.Forms.SendKeys.Send
  8. ligerui grid行编辑示例
  9. php学习笔记6--php中的文件包含 include,require,include_once,require_once
  10. API函数
  11. 一周学会Mootools 1.4中文教程:(6)动画
  12. 关于使用commons-email包测试发送邮件遇到的问题
  13. zabbix3.2在lamp环境安装
  14. IDEA设置生成类基本注释信息
  15. drf 认证、权限、限流、过滤、排序、分页器
  16. PAT甲题题解-1063. Set Similarity (25)-set的使用
  17. 让IE依据HTML头标签选择显示模式
  18. Java实例---flappy-bird实例解析
  19. AppScan9.0.3.5漏洞扫描记录
  20. BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)

热门文章

  1. ubuntu 新建一个root用户
  2. IOS开发之ZBarReaderView的使用
  3. Perl/C#连接Oracle/SQL Server和简单操作
  4. 360 网络攻防 hackgame 解题报告(通关)
  5. spring 第一篇(1-1):让java开发变得更简单(上)
  6. hud项目lcd调试
  7. 【翻译自mos文章】在Oracle GoldenGate中循环使用ggserr.log的方法
  8. Hello JFinal World
  9. 2017 css新特性
  10. awk 特征相同的行合并