sed与awk入门(一)

基础正则表达式字符

  • ^word 待查找的字符串在行首

  • word$ 待查找的字符串在行尾

  • . 代表一定有一个任意字符的字符

  • \ 转义字符

  • * 重复零个到无穷多个的前一个字符

  • [list] 从字符集合的RE字符里面找出想要选取的字符

  • [n1-n2] 从字符集合的RE字符里面找出想要选取的字符范围

  • [^list] 从字符集合的RE字符里面找出不要选取的字符或范围

  • [n,m] 连续n到m个的前一个RE字符

  • + 重复一个或一个以上的前一个RE字符

  • ? 零个或一个的前一个RE字符

  • | 用或的方式找出数个字符串

  • () 找出“组”字符串

  • ()+ 多个重复组的判别

注意,正则表达式的特殊字符与一般命令行输入命令的通配符并不相同

sed

sed本身是一个管道命令,可以分析standard input 而且sed还可以将数据进行替换、删除、新增、选取特定行等功能
sed [-nefr] [动作]
-n 使用安静模式,在一般sed用法中,所有来自stdin的数据一般都会被列出屏幕中,但如果加上了-n参数后,则只有经过sed特殊处理的才会被列出来
-e 直接在命令行模式上进行sed的动作编辑
-f 直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作
-r sed的动作支持的是扩展性语法(默认是基础正则表达式)
-i 直接修改读取的文件内容,而不是由屏幕输出

动作说明: [n1[,n2]] function
n1,n2 不见得一定会存在,一般代表选择进行动作的行数

function有下面这些参数:
a 新增,a的后面可以接字符串,而这些字符串会在新的一行出现
c 替换,c的后面可以接字符串,这些字符串可以替换n1, n2之间行
d 删除,后面不需要接参数
i 插入,i的后面可以接字符串
p 打印,将某个选择的数据打印出来
s 替换,可以直接进行替换的工作,通常s动作可以搭配正则表达式

下面是示例:
以行为单位的新增/删除功能

nl /etc/passwd | sed '2,25d'

     1  root:x:0:0:root:/root:/bin/bash
    26  tomcat:x:999:998::/home/tomcat:

nl /etc/passwd | sed '2a drink tea'

     1  root:x:0:0:root:/root:/bin/bash
     2  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
drink tea
     3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
     4  sys:x:3:3:sys:/dev:/usr/sbin/nologin
     5  sync:x:4:65534:sync:/bin:/bin/sync
     (略...)

以行为单位的替换与显示功能

nl /etc/passwd | sed '2,5c new line'

     1  root:x:0:0:root:/root:/bin/bash
new line
     6  games:x:5:60:games:/usr/games:/usr/sbin/nologin
     7  man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
     (略...)

sed 's/要被替换的内容/新的字符串/g'
cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'

将/etc/man.config中存在MAN的行筛选出来,并把开头是#的行去掉(先置换成空行,再讲空行删除)

直接修改文件内容

sed -i '$a # this is a new line' regular_express.txt
由于$代表最后一行,而a的操作是新增,因此是该文件最后新增一行

awk

相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分出数个“子弹”来处理
awk '条件类型1{动作1} 条件类型2{动作2}...' filename

示例

[dmtsai@study ~]$ last -n 5  <==仅取出前五行
dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in
dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22)
dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12)
dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14)
dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15)

若想取得第一列和第三列的数据:

[dmtsai@study ~]$ last -n 5 | awk '{print $1 "\t" $3}'
dmtsai 192.168.1.100
dmtsai 192.168.1.100
dmtsai 192.168.1.100
dmtsai 192.168.1.100
dmtsai Fri

awk是以行尾一次处理的单位,而以字段为最小的处理单位,可以通过内置的变量来查看处理的是第几行第几列
NF 每一行拥有的字段总数
NR 目前处理的第几行数据
FS 目前的分割字符

示例:

Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000

如何帮我计算每个人的总额呢?而且我还想要格式化输出喔!我们可以这样考虑:

第一行只是说明,所以第一行不要进行加总(NR==1 时处理);
第二行以后就会有加总的情况出现(NR>=2 以后处理)

cat pay.txt | \ 
> awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total" } 
> NR>=2{total = $2 + $3 + $4 
> printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'

      Name 1st 2nd 3th Total
     VBird 23000 24000 25000 72000.00
    DMTsai 21000 20000 23000 64000.00
     Bird2 43000 42000 41000 126000.00
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容