码迷,mamicode.com
首页 > 其他好文 > 详细

sed

时间:2015-12-13 23:52:11      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:替换字符串   文本文件   sed   

sed   

  • 是一个非交互式文本编辑器,可对文本文件和标准输入进行编辑;只对缓冲区总共原始文件的副本进行编辑,并不编辑原始的文件.

  • 如果需要保存更改的内容需要重定向到另一个文件sed  ‘sed命令‘  fff > ggg


使用以下场合

  • 大文件

  • 编辑命令复杂,在交互式编辑器中难以输入

  • 对文件扫描一遍,但需要执行多个编辑参数



处理流程

  1. 读入新的一行内容到缓存空间

  2. 从操作指令中去匹配第一条指令,判断是否匹配模式.

  3. 如果不匹配,则忽略后续的编辑命令,回到第2步继续去匹配下一条指令;

  4. 如果匹配则针对缓存的行执行编辑命令,完成后回到第2步继续去匹配下一条指令;

  5. 所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;

  6. 所有行处理完之后结束.


定义sed的三种方式:

  1.  sed 选项 ‘命令‘ 文件名

  2. sed 选项 -f 脚本 文件名

  3. ./sed脚本文件 文件名


sed选项

  • -n  不打印所有行到标准输出

  • -e  可使用多个sed编辑命令

  • -f  调用sed脚本文件

  • -r  启用扩展正则表达式

  • -i  直接编辑


sed编辑命令

  • {} 在定位行执行命令组

  • p 打印匹配行

  • q 匹配一次即退出

  • = 打印行号

  • d 删除匹配行

  • n 处理下一行

  • s 替换字符串

  • y 变换字符

  • r 从另一个文件中读文本

  • w 保存到另一个文件中

  • i\  定位行之前插入

  • a\ 定位行之后插入

  • c\ 修改匹配行

  • h  将模式缓冲区复制到保持缓冲区

  • H  保持缓冲区追加到模式缓冲区

  • x  互换模式和保持缓冲区

  • g  保持缓冲区复制到模式缓冲区

  • G  将模式缓冲区追加到保持缓冲区


文本定位

  • $         最后一行

  • x         x行        

  • x,y        x到y行

  • x,y!       不包含x到y行的行

  • /123/     包含123的行     

  • /123/,x    从与123匹配行到x行x,/123     

  • 从x行到与123匹配的行


下面给出一些命令示例:


r  从另一个文件中读取文本

        sed ‘/root/r 文件名‘ 

w  将文写入到一个文件 

        sed ‘/root/w 文件名‘ 

s  替换字符串  

        sed ‘s/root/1234/g‘ 

y  变换字符

        sed ‘y/abcd/ABCD/g‘ 

c\修改文本

        sed ‘/root/c\ffffffff‘ 

n  处理匹配行的下一行

        sed ‘/root/{n;s/bin/ooo/g;}‘ 文件名

行首加# 

        sed -i‘s/^/#/g‘ qqq


sed ‘/^$/d;G‘      先用sed  ‘/^$/d‘  查找并删除空行;然后用 sed G插入空行

sed ‘G;G‘       使一个文件中每一行都占用三行空间(就是在每一行后边插两行空行)

sed ‘/regex/G‘  查找后在后边加入一空行

sed -n ‘$=‘     统计行数

sed -n ‘2,+3p‘   输出第二行及其后3行

sed -n ‘n;p‘    输出偶数行

sed -n ‘p;n‘    输出奇数行


删除每行开头的所有空格

    sed ‘s/^\s*//g‘

删除文件每行的第二个字符

    sed -r ‘s/(.)(.)(.*)/\1\3/‘ a

    sed ‘s/.//2‘ a

删除文件每行的最后一个字符

    sed -r ‘s/(.*)(.)/\1/‘ a

    sed ‘s/.$//g‘ a

删除文件每行的倒数第二个单词。

    sed -nr ‘s/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p‘ 

删除文件每行的最后一个单词。

    sed -nr ‘s/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p‘


大小写转换

sed中,使用\u表示大写,\l表示小写


1. 把每个单词的第一个小写字母变大写:

sed ‘s/\b[a-z]/\u&/g‘ a    \b是单词边界,也可以用\<替换\b

2. 把所有小写变大写:

sed ‘s/[a-z]/\u&/g‘ filename

3. 大写变小写:

sed ‘s/[A-Z]/\l&/g‘ filename


本文出自 “破浪Linux” 博客,请务必保留此出处http://plang.blog.51cto.com/9002142/1722599

sed

标签:替换字符串   文本文件   sed   

原文地址:http://plang.blog.51cto.com/9002142/1722599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!