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的处理流程:
- 读入第一行,并将第一行的数据填入$0,$1,$2等变量当中;
- 依据条件类型的限制,判断是否需要进行后面的动作;
- 做完所有的动作与条件类型;
- 若还有后续的‘行’的数据,则重复上面1-3的步骤,直到所有的数据都读完为止。
变量名字及意义:
- NF:每一行($0)拥有的字段总数
- NR:目前awk所处理的是‘第几行’数据
- FS:目前的分割字符,默认是空格
例:awk的逻辑运算
数据:
处理:
- 第一行只是说明,所以第一行不要进行加总(NR==1时处理)
- 第二行以后就会有加总的情况(NR>=2以后处理)
- 第三行将处理后的结果格式输出
- 所有的awk动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号“;”间隔,或者直接以enter键来隔开每个命令
- 逻辑运算中,如果是“等于”的情况,务必使用两个等号“==”
- 与bash、shell的变量不同,在awk中,变量可以直接使用,不需要加上$符号
以上内容摘自《鸟哥的私房菜》第三版 基础学习篇
Leave a Reply