linux三剑客之sed应用(用于个人学习以及回顾)

一. sed工具简介

     Stream EDitor 流式编辑器

  •      非交互式,基于模式匹配过滤和修改文本

  •      逐行处理,并将结果输出到屏幕

  •      可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作

     命令格式

        主要用法:

  •     格式一:前置命令 | sed [选项] ‘编辑指令’

  •     格式二:sed [选项] ‘编辑指令’ 文件

       常见命令选项:

  •    -n : 屏蔽默认输出(全部文本)

  •    - i : 直接修改文件内容

  •     -r : 启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项

      条件,可以是行号或/正则/

  •    行号可以使用当个数字表示单行

  •    或者3,5表示连续的多行

  •    省略条件,则默认逐行处理全部文本

  •   匹配正则时,需要使用//


二. sed基本处理动作

操作符 用途 指令示例
p 打印行 2,4p  输出第2、3、4行
2p;4p   输出第2行、4行
d 删除行
2,4d   删除第2、3、4行
s
字符串替换
s/old/new/  将每行的第1个old替换new
s/old/new/3  将每行的第3个old替换new
s/old/new/g  将所有old替换new

 输出文本

示例 解释
sed -n 'p' abc.txt 输出所有行,等同于cat abc.txt

sed -n '3p' abc.txt

输出abc.txt第三行
sed -n '4,7p' abc.txt 输出abc.txt第3~7行

sed -n '4,+10p' abc.txt

输出abc.txt第4行及其后的10行内容
sed -n '/^hello/p' abc.txt 输出abc.txt以hello开头的行
sed -n '$=' abc.txt 输出文件的行数

删除文本

示例 解释
sed ‘3,5d’abc.txt 删除abc.txt第3~5行

sed  '/xml/d' abc.txt

删除abc.txt所有包含xml的行
sed  '/xml/!d' abc.txt 删除abc.txt不包含xml的行,!符号表示取反

sed   '/^hello/d' abc.txt

删除abc.txt以hello开头的行
sed   '$d' abc.txt 删除abc.txt文件的最后一行
sed   '/^$/d' abc.txt 删除abc.txt所有空行

 替换文本

示例 解释
sed  's/hello/HELLO/' abc.txt 将每行中的第一个hello替换为HELLO

sed  's/hello/HELLO/3' abc.txt

将每行中的第三个hello替换为HELLO
sed  's/hello/HELLO/g' abc.txt 将所有的hello都替换为HELLO

sed   's/^hello//g' abc.txt

将所有的hello都删除(替换为空串)
sed   '4,7s/^/#/' abc.txt 将第4~7行注释掉(行首加#号)
sed   's/^#hell/hell/' abc.txt 解除以#hell开头的行的注释(去除行首的#号)


三. sed文本块

操作符 用途 指令示例
i
行前插入文本 2iYY 在第2行之前添加文本行“YY”
4,7iYY 在第4-7行的每一行前添加文本行
a 行后插入文本 2aYY 在第二行之后添加文本
/^XX/aYY 在以XX开头的行之后添加文本
c
替换当前行 2cYY 将第2行的内容修改为"YY"


四.sed复制剪切

      模式空间

  • 存放当前处理的行,将处理结果输出

  • 若当前行不符合处理条件,则原样输出

  • 处理完当前行再读入下一行来处理

      保持空间

  • 作用类似于“剪贴板”

  • 默认存放一个空行(换行符\n)

      基本动作

  • H:   模式空间 --- [追加] ---> 保持空间

  • h: 模式空间 --- [覆盖] ---> 保持空间

  • G:   保持空间 --- [追加] ---> 模式空间

  • g:    保持空间 --- [覆盖] ---> 模式空间

   

  实例1:

   将reg.txt的第1-3行复制到文件末尾  

[root@client ~]# cat reg.txt
abcd xx
xx
abcabcd xx
[root@client ~]# sed '1,3H;$G' reg.txt
abcd xx
xx
abcabcd xx

abcd xx
xx
abcabcd xx

 实例2:

  将第1-2行剪切到文件末尾

[root@client ~]# cat reg.txt
abcd xx
xx
abcabcd xx
[root@client ~]# sed '1h;2H;1,2d;$G' reg.txt
abcabcd xx
abcd xx
xx



五. 文件导入导出

    导入导出操作

     基本动作

  • r 动作结合-i选项才会存入,否则只输出

  • w 动作以覆盖的方式另存为新文件

操作符
用途 指令示例
r 读取文件 3r abc.txt 在第3行下方插入文件abc.txt
4,7r abc.txt  在第4-7每一行后插入文件abc.txt
w 保存到文件 3w abc.txt 将第3行另存为文件abc.txt

4,7w abc.txt 将第4-7行另存为文件abc.txt

猜你喜欢

转载自blog.51cto.com/11483827/2365017