效率提升之 SED命令使用

上一篇 / 下一篇  2017-09-24 17:06:56 / 个人分类:linux

  
sed可依照script的指令,来处理、编辑文本文件。
流编辑器 stream editer,是以行为单位的处理程序


语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

         参数说明
-e<script> 以选项中指定的script(命令行)来处理输入的文本文件。
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法
-f<script文件>以选项中指定的script文件来处理输入的文本文件。
-n或--quiet或--silent 仅显示script处理后的结果。
-r 支持扩展正则表达式
-i 直接修改文件内容
-h或--help 显示帮助。

动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何命令行;
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

正则介绍(基本)
^ 行首
$ 行尾
.   除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头      单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾
x\{m\} x出现m次
x\{m,\} x出现m次至多次(至少m次)
x\{m,n\} x出现m次至n次

正则介绍(扩展)
? 前导字符零个或一个
+ 前导字符一个或多个
abc|def abc或def
a(bc|de)f abcf 或 adef
(bc)+ bc 或 bcbc....
  • 正则必须用/ /包裹起来
  • 扩展正则需要用 -r 参数或使用转义符号\
       

使用实例

实验文件内容:

1,删除文件每行的第一个字符:



2,删除文件每行开头的第一个单词:
还有一个开头的空格没有去掉怎么办?
方法1:连续使用两个 sed命令
:
方法2:分组技巧


3,交换jim and davie两个单词的位置

4,搜索并替换关键单词
   替换第2行数字2000 为100
         

    5.把name替换成大学写字母并用括号()括起来: sed -r 's/[A-Z]/(&)/g' passwd
    
     提示:分组引用;多点编辑;

     

6,用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成   mm;yy;dd格式
date "+%m/%y/%d" | sed -r 's/\/\-/g'

7.插入新的行



8.替换第二行的内容

9.删除第二行的内容


10.匹配删除



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2017-10-21  
1234567
891011121314
15161718192021
22232425262728
293031    

数据统计

  • 访问量: 171
  • 日志数: 1
  • 建立时间: 2016-01-27
  • 更新时间: 2017-09-24

RSS订阅

Open Toolbar