1. 介绍

这两个命令在使用Linux的过程中比较常用,这里小做总结,对其核心用法进行记录。

2. sed

sed命令主要用于对行的处理。可以对制定的行进行编辑(增加删除内容)、替换。

2.1 基本使用说明

其man文件的说明如下:

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

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

PS: 上面的-n参数比较重要,一般场景下我们只看经过sed处理后的内容,所以一般加上该参数。另外-f命令也比较重要,可以处理完毕后写入文件。

2.2 使用方法

看了使用说明后,使用方法就简单了。就是选定行,然后执行相关的动作即可。

例如:

2.2.1 指定行后进行动作

# 删除第3行到最后一行的内容。其中$表示最后一行
nl myfile.txt | sed '3,$d'
# 替换2到5行的内容,替换的内容可以带空格
nl myfile.txt | sed '2,5c some thing'

2.2.2 查找匹配后进行动作

# 查找所有行中的匹配的行,类似grep。
nl myfile.txt | sed  -n '/match/p'
# 查找替换
nl myfile.txt | sed  -n 's/match/new_char/g'

3. awk

awk相比sed功能更加强大点,除了循环对行进行处理之外,在列上的处理能力更加强大。同时还支持编程。我们这里仅仅罗列其比较常用的几个功能。

其基本使用方法为:

awk '{pattern + action}'  fileName

3.1 BEGIN和END

这两个关键字必须大写,表示在行处理开始和结束的时候做一些动作。
例如:

awk  'BEGIN{print "Begin"} {print $1} END{print "End"}' fileName

3.2 处理行中的指定列

这个是最常用的方法,默认采用空格风格,可以通过-F来制定分隔符。

# 逗号分隔符
awk -F ',' '{print $1 $2}' fileName

3.3 统计编程

AWK编程一般来说常用的主要就是做统计求和了。掌握以下统计求和例子即可:

# 对第一列按照名字进行求和
 awk '{sum[$1]++}END{for(x in sum){print x","sum[x]}}' fileName

这个功能也可以使用sort和uniq命令来完成

awk '{print $1}' | sort | uniq -c | sort -nr

参考资料:

  1. linux sed命令详解
  2. linux awk命令详解