码迷,mamicode.com
首页 > 系统相关 > 详细

linux sed awk

时间:2015-09-20 07:04:13      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:linux   编辑器   字符串   

sed :

    非交互式的流编辑器,通过多种转换修改流经他的文本,并将输出结果打印到屏幕上,但并不改变文件自身,可以做的编辑动作包括删除,查找,替换,插入,添加或者从其他文件中读取数据。

使用场景:

    过于庞大的文本,有规律的文本修改,加快文件处理速度,常规修改困难的文本

语法:

    sed  [参数]  命令  目录

工作机制:

    每次读取一行文本至“模式空间”中,在其中完成处理,并将处理 结果输出至标准输出设备

常用参数:

    -r 支持扩展正则表达式语法

    -n 使用安静模式,使用后只有经过sed特殊处理的那行才会被列出来

    -e 直接在指令模式上进行动作编辑

    -f 将sed 的动作写一个文档,-f filename 则可以执行filename内的sed 动作

    -i 直接修改读取的档案内容,而不是由屏幕输出

命令:

        [n1[,n2]] function

n1,n2 :不见得会存在,一般代表‘选择进行的行数’

命令选项:

    a 新增,可以接字符串,而字符串会出现在新的下一行中

    c 取代,可以接字符串,这些字符串可以取代n1,n2之间的行

    d 删除

    i 插入,后面接的字符串会在新的上一行出现

    p 打印模式空间的行

    P打印匹配的第一行

    g 全局取代

    s/old/new 用new替换正则表达式old  --一般于g连用

    = 显示行号

    w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中;

    r /path/from/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并;

[root@iZ28qzns9m4Z bashtest]# nl passwd |sed ‘s/user001/usernew001/g‘

技术分享

[root@iZ28qzns9m4Z bashtest]# nl passwd |sed ‘2,5d‘
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
[root@iZ28qzns9m4Z bashtest]# nl passwd |sed ‘p‘
     1	root:x:0:0:root:/root:/bin/bash
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# sed -i ‘s/\:/\#/g‘ passwd 
[root@iZ28qzns9m4Z bashtest]# cat passwd 
root#x#0#0#root#/root#/bin/bash
bin#x#1#1#bin#/bin#/sbin/nologin
daemon#x#2#2#daemon#/sbin#/sbin/nologin
adm#x#3#4#adm#/var/adm#/sbin/nologin
lp#x#4#7#lp#/var/spool/lpd#/sbin/nologin
sync#x#5#0#sync#/sbin#/bin/sync
shutdown#x#6#0#shutdown#/sbin#/sbin/shutdown
  • 高级命令:

  • h:用模式空间中的内容覆盖保持空间的内容;

  • H:把模式空间中的内容追加至保持空间中内容的后面;

  • g:从保持空间中取到其内容,并将其覆盖模式空间中的内容;

  • G:从保持空间中取到其内容,并将其追加在模式空间中的内容的后面;

  • x:把保持空间和模式空间中的进行交换;

  • n:读取匹配到的行的下一行至模式空间;(会覆盖模式空间中的原有内容);

  • N:读取匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面;

  • d:删除模式空间中的内容;

  • D:删除多行模式空间中的首行;

  • 注意:命令功能可使用!取反;分号可用于分隔脚本;

[root@iZ28qzns9m4Z bashtest]# sed ‘G‘ passwd 
root#x#0#0#root#/root#/bin/bash

bin#x#1#1#bin#/bin#/sbin/nologin

daemon#x#2#2#daemon#/sbin#/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# nl passwd |sed ‘n;d‘ 
     1	root#x#0#0#root#/root#/bin/bash
     3	daemon#x#2#2#daemon#/sbin#/sbin/nologin
     5	lp#x#4#7#lp#/var/spool/lpd#/sbin/nologin
     7	shutdown#x#6#0#shutdown#/sbin#/sbin/shutdown
     9	mail#x#8#12#mail#/var/spool/mail#/sbin/nologin
    11	games#x#12#100#games#/usr/games#/sbin/nologin
    13	nobody#x#99#99#Nobody#/#/sbin/nologin

常用正则表达式:

    ^ 匹配行开始

    $ 匹配行的结束

    . 匹配任意非换行字符

    \(..\)保存匹配字符

    x\{n\} 重复字符x,n次

    x\{m,\} 重复字符x,至少m次

AWK:基于列的文本处理工具,他认为文件时有单词和空白字符组成

格式:

    awk ‘条件类型1{动作1} 条件类型2{动作2}‘ filename

    awk [options] ‘program‘ file file ...

   awk [options] ‘PATTERN{action}‘ file file ...

    要点:

(1) 各项目之间使用逗号分隔,而输出时则使用输出分隔符分隔;

(2)输出的各item可以字符串或数值、当前记录的字段、变量或awk的表达式;数值会被隐式转换为字符串后输出;

(3) print后面item如果省略,相当于print $0;输出空白,使用pirnt "";

运算符:

运算符 描述

= += -= *= /= %= ^= **= 赋值

?: C条件表达式

|| 逻辑或

&& 逻辑与

~ ~! 匹配正则表达式和不匹配正则表达式

< <= > >= != == 关系运算符

空格 连接

+ - 加,减

* / & 乘,除与求余

+ - ! 一元加,减和逻辑非

^ *** 求幂

++ -- 增加或减少,作为前缀或后缀

$ 字段引用

in 数组成员



环境变量:

变量 描述

$n 当前记录的第n个字段,字段间由FS分隔。

$0 完整的输入记录。

ARGC 命令行参数的数目。

ARGIND 命令行中当前文件的位置(从0开始算)。

ARGV 包含命令行参数的数组。

CONVFMT 数字转换格式(默认值为%.6g)

ENVIRON 环境变量关联数组。

ERRNO 最后一个系统错误的描述。

FIELDWIDTHS 字段宽度列表(用空格键分隔)。

FILENAME 当前文件名。

FNR 同NR,但相对于当前文件。

FS 字段分隔符(默认是任何空格)。

IGNORECASE 如果为真,则进行忽略大小写的匹配。

NF 当前记录中的字段数。

NR 当前记录数。

OFMT 数字的输出格式(默认值是%.6g)。

OFS 输出字段分隔符(默认值是一个空格)。

ORS 输出记录分隔符(默认值是一个换行符)。

RLENGTH 由match函数所匹配的字符串的长度。

RS 记录分隔符(默认是一个换行符)。

RSTART 由match函数所匹配的字符串的第一个位置。

SUBSEP 数组下标分隔符(默认值是/034)。

3、awk的printf命令

命令的使用格式:printf format, item1, item2,...

要点:

(1) 要指定format;

(2) 不会自动换行;如需换行则需要给出\n

(3) format用于为后面的每个item指定其输出格式;

format格式的指示符都%开头,后跟一个字符:

%c: 显示字符的ASCII码;

%d, %i: 十进制整数;

%e, %E: 科学计数法显示数值;

%f: 显示浮点数;

%g, %G: 以科学计数法格式或浮点数格式显示数值;

%s: 显示字符串;

%u: 显示无符号整数;

%%: 显示%自身;

修饰符:

#:显示宽度

-:左对齐

+:显示数值的符号

.#: 取值精度


4、awk输出重定向

print items > output-file

print items >> output-file

print items | command


特殊文件描述符:

/dev/stdin: 标准输入

/dev/stdout: 标准输出

/dev/stderr: 错误输出

awk的内置函数

split(string,array[,fieldsep[,seps]]):

功能:将string表示的字符串以fieldsep为分隔符进行切片,并切片后的结果保存至array为名的数组中;数组下标从1开始;

length(string)

功能:返回给定字串的长度

substr(string,start[,length])

功能:从string中取子串,从start为起始位置为取length长度的子串;

[root@iZ28qzns9m4Z bashtest]# last -n 5 |awk ‘{print $1 "\t" $3}‘
root	211.161.27.115
root	61.182.229.120
root	61.182.229.120
root	180.91.225.119
root	180.91.225.119
	
wtmp	Tue
[root@iZ28qzns9m4Z bashtest]# 
[root@iZ28qzns9m4Z bashtest]# awk ‘{print substr($1,6)}‘ passwd 
x#0#0#root#/root#/bin/bash
#1#1#bin#/bin#/sbin/nologin
n#x#2#2#daemon#/sbin#/sbin/nologin
#3#4#adm#/var/adm#/sbin/nologin
[root@iZ28qzns9m4Z bashtest]# nl passwd |awk ‘{print length}‘
38
39
46


linux sed awk

标签:linux   编辑器   字符串   

原文地址:http://canshan.blog.51cto.com/2613522/1696411

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