sed,awk

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:不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的,则‘10,20[动作行为]’
function有下面这些参数:
a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c:替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行;
d:删除,因为是删除,所以d后面通常不接任何参数;
i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p:打印,将某个选择的数据打印出来。通常p会与参数sed -n一起运行;
s:替换,可以直接进行替换工作。通常这个s的动作可以搭配正则表达式。

例一:删除第2到5行

注意sed后面接的动作,务必以”两个单引号括住!

如果体型变换一下,删除第三到最后一行,则是‘nl /etc/passwd | sed ‘3,$d’’,这个$代表最后一行。

例二:将第2~5行的内容替换成为‘No 2-5 number’

sed 另一个强大的用法,部分数据的查找并替换:sed ‘s/要被替换的字符串/新的字符串/g’

awk:好用的数据处理工具

相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个‘字段’来处理。因此。awk适合小型的数据处理
用法:awk ‘条件类型 1{动作 1} 条件类型 2{动作 2} …’ filename
awk的处理流程:

  1. 读入第一行,并将第一行的数据填入$0,$1,$2等变量当中;
  2. 依据条件类型的限制,判断是否需要进行后面的动作;
  3. 做完所有的动作与条件类型;
  4. 若还有后续的‘行’的数据,则重复上面1-3的步骤,直到所有的数据都读完为止。

变量名字及意义:

  • NF:每一行($0)拥有的字段总数
  • NR:目前awk所处理的是‘第几行’数据
  • FS:目前的分割字符,默认是空格

例:awk的逻辑运算

数据:
处理:

  • 第一行只是说明,所以第一行不要进行加总(NR==1时处理)
  • 第二行以后就会有加总的情况(NR>=2以后处理)
  • 第三行将处理后的结果格式输出
  • 所有的awk动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号“;”间隔,或者直接以enter键来隔开每个命令
  • 逻辑运算中,如果是“等于”的情况,务必使用两个等号“==”
  • 与bash、shell的变量不同,在awk中,变量可以直接使用,不需要加上$符号

 

以上内容摘自《鸟哥的私房菜》第三版 基础学习篇

发表评论

电子邮件地址不会被公开。 必填项已用*标注