/*目录*/

sed,awk,grep

sed流式编辑器

逐行处理,可以非交互式对文本、脚本进行修改查看等操作

[dmtsai@study ~]$ sed 选项 [动作] 
选项:
-n :在一般sed 的用法中,所有来自STDIN 的资料一般都会被列出到屏幕上。
     但如果加上-n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行sed 的动作编辑;
-f :直接将sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;
-r :sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i :直接修改读取的档案内容,而不是由屏幕输出。
      
动作说明:
a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c 替换, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行!
d 删除,因为是删除啊,所以d 后面通常不接任何东西;
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 打印,通常p 会与参数sed -n 一起运作~
r 读某文件的内容到目标文件

例子:

sed 'r a.txt' abc.txt    //将a.txt中的内容读到abc.txt的每行后
w 写入目标文件的内容到其他文档
sed 'w a.txt'  abc.txt  //将abc.txt中的内容覆盖保存到a.txt中,如果a.txt不存在则创建
sed 's/要被取代的字串/新的字串/g'   //sed部分资料的搜寻并取代的功能

1.将test.txt内每一行结尾.则换成! 
[ymtk2 ~]$ sed -i 's/\.$/\!/g' test.txt

2.直接在test.txt最后一行加入『# This is a test』 
[ymtk2 ~]$ sed -i '$a # This is a test' test.txt
#由于$代表的是最后一行,而a的动作是新增,因此该档案最后新增

3.将/etc/passwd的内容列出并且列印行号,同时删除2-5行
[deploy@i-ka6ymtk2 ~]$ nl /etc/passwd | sed '2,3d'
 1	root:x:0:0:root:/root:/bin/bash
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
………………

4.在/etc/passwd的内容第二行后加上『drink tea?』字样
[deploy@i-ka6ymtk2 ~]$ nl /etc/passwd | sed '2a drink tea'  //以行为单位的新增/删除功能nl
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
………………

sed 查看,修改文本
grep 模糊搜索,能力一般
awk 查看文本内容,可以实现复杂的搜索

awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

方法一:
前置命令 | awk 选项  指令

方法二:
awk 选项  指令  文件
awk '{print}'  test.txt   //使用awk显示文本中所有内容
awk '{print $1}' test.txt  //使用awk显示文本中每行的第1列,默认情况下,每列的分隔符是空格或者tab
head -1 /etc/passwd  >  test2.txt
awk -F: '{print $2}' test2.txt  //使用:作为分隔符,显示第2列内容
df -h | awk '{print $4}'   //使用前置命令查看磁盘剩余用量
awk -F[:/] '{print $7}'  test2.txt   //使用:或者/作为分隔符显示文本中第7列,两个分隔符连在一起时,中间的“空”也算一列

awk内置变量   $0显示全部列   $1显示第1列  $2 ....     
NR-->行号   NF-->列数
awk '{print $0,$2}' test.txt  //显示每行的所有内容,以及第2列
awk '{print NR,NF}' test.txt  //显示每行的行号,以及这行一共有多少列

grep

man grep #查看手册
基础正则表达式字符整理

^word	意义:待搜寻的字串(word)在行首

word$	意义:待搜寻的字串(word)在行尾

.	意义:代表『一定有一个任意字元』的字符

\	意义:将特殊符号的特殊意义去除

*	意义:重复零个到无穷多个的前一个字符

[list]	意义:集合,里面列出想要截取的字符范围

[n1-n2]	意义:集合,里面列出想要截取的字符范围

[^list]	意义:集合,里面列出不要的字串或范围

\{n,m\}	意义:连续n到m个的『字符』
意义:若为\{n\}则是连续n个的前一个字符,若是\{n,\}则是连续n个以上的前一个字符!
posted @ 2020-07-09 15:14  嘟嘟噜~  阅读(152)  评论(0编辑  收藏  举报