Linux 文本处理三剑客 (2)

2a 后面加上空格,然后接着输入想要追加的文本内容(106,dandan,CSO`)即可

2.4 在文本指定的行前面插入文本 sed "2i 106,dandan,CSO" text.txt >>> 101,oldboy,CEO 106,dandan,CSO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CTO

2i 106,dandan,CSO的意思:

2 表示对第 2 行进行操作,其他的行可忽略

i 代表插入的意思,2i 表示在第2行即当前行插入文本,即插入到第二行

2i 后面加上空格,然后跟上要插入的文本(106,dandan,CSO),最后接上要处理的文件 text.txt

2.5 在文件指定行后追加多行文本 sed "2a 106,dandan,CSO\n107,bingbing,CCO" text.txt >>> 101,oldboy,CEO 102,zhangyao,CTO 106,dandan,CSO 107,bingbing,CCO 103,Alex,COO 104,yy,CFO 105,feixue,CTO 2.6 删除文件中一行指定的文本 sed "2d" text.txt >>> 101,oldboy,CEO 103,Alex,COO 104,yy,CFO 105,feixue,CTO 2.7 删除文件中指定的多行文本 sed "2,5d" text.txt # 表示删除 2-5 行,所以结果只剩下一行 >>> 101,oldboy,CEO 2.8 使用sed命令替换文本内容 sed "s#zhangyao#dandan#g" text.txt >>> 101,oldboy,CEO 102,dandan,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CTO 2.9 打印输出文件的指定行的内容 sed "2p" text.txt # 这里使用了 sed 内置命令 p 来实现查询功能,并结合数字地址指定查询第2行的内容,但是我们会发现结果不只是输出第2行,文件的其他内容也显示出来了,这是因为 sed 命令有一个默认输出的功能. >>> 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CTO sed -n "2p" text.txt # 为了解决上面命令显示多余内容的问题,使用选项 -n 取消默认输出,只输出匹配行的文本,因此大家只需要记住使用命令 p 必用选项 -n >>> 102,zhangyao,CTO sed -n "2,4p" text.txt # 输出 2-4 行 >>> 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 2.10 -i 选项 这个选项的作用是能够实际修改文件的内容,前面几个例子操作完命令之后,文件的内容并没有发生变化,这是因为 sed 命令默认操作的是内存中的数据,如果想要真正地修改文件的内容,就需要使用选项 `-i`将修改写到磁盘文件上。 2.11 N 内置命令

有文件如下

stu10309 7f754wdw stu10123 faioj322 stu12452 fasdassa ...

现在要把格式变成

stu10309=7f754wdw stu10123=faioj322 stu12452=fasdassa

可用以下方法实现

sed "N;s#\n#=#g" text.txt sed 内置命令 N 的作用:不会清空模式空间的内容,并且从输入文件中读取下一行数据,追加到模式空间中,两行数据以换行符 \n 连接。 第一行是 `stu10309` 存入模式控件,碰到命令 `N`,读取第二行 `7f754wdw`,此时模式空间的内容为 `stu10309\n7f754wdw`;然后执行 `s#\n#=#g` 将 `\n`替换为 `=`,即为 `stu10312=`7f754wdw`,输出到屏幕中,第一个循环结束;后面的循环和前面的思路一样,直到文件结束。 三、awk 基础入门 不仅是Linux系统中的一个命令,而且还是一种编程语言。是Linux系统最强大的文本处理工具,没有之一。 3.1 参数选项及说明 awk 命令的常用功能 简要例子说明
指定分隔符显示某几列   awk -F "GET|HTTP" \'{print $2}\' test.log 直接取出显示出日志文件的 url 这一列  
通过正则表达式取出你想要的的内容   awk \'$6~/Failed/{print $11}\' /var/log/secure 分析生产环境中的日志找出谁在破解用户的密码  
显示出某个范围内的内容   awk \'NR20,NR30\' filename 显示文件的20到30行内容  
通过awk进行统计计算   awk \'{sum+=$0}END{print sum}\' ett.txt 计算总和  
awk数组计算与去重   awk \'{array[$1]++}END{for(key in array)print key,array[key]}\' access.log 对日志进行统计与计数  
awk [option] \'pattern{action}\' file ... 参数 \'条件{动作}\' 文件 ...

参数选项及说明

参数选项 解释说明
-F   指定字段分隔符  
-v   定义或修改一个 awk 内部的变量  
3.2 示例文本 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/mologin adm:x:3:4:adm:/var/adm:/sbin/lologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool?mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin 3.3 显示文件中的第5行 cat -n test.txt # 先打印内容并在每行内容的开头显示行号 awk \'NR==5\' test.txt 首先NR 在awk中表示行号(记录号),NR==5表示行号等于5的行。这里需要注意的是必须使用两个等号,在awk中两个等号表示 ”等于“,一个等号表示赋值,即向一个变量里面放置内容。

注意:awk后面所接的内容要用单引号

显示一部分行的内容,例如显示 2-6 行

awk \'NR==2,NR==6\' test.txt 3.4 用 awk 实现给文件每行的内容之前加上行号 awk \'{print NR,$0}\' test.txt

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzspf.html