首页 > 其他分享 >sed & awk 用法

sed & awk 用法

时间:2023-03-23 17:36:13浏览次数:43  
标签:xml passwd 用法 etc sed awk txt 替换

sed stream EDitor 流式文本编辑器
非交互,基于模式匹配过滤及修改文本
逐行处理,并将结果输出到屏幕
可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作

用法1:前置命令 | sed [选项] '编辑指令'
用法2:sed [选项] '编辑指令' 文件
###############################

参数
-e<script> 或 --expression=<script> 以选项中指定的script来处理输入的文本文件
-f<script文件> 或 --file=<script文件> 以选项中指定的script文件来处理输入的文本文件
-h 或 --help 显示帮助
-n 或 --quiet或--silent 仅显示处理后的结果 //常用
-V 或 --version 显示版本信息
-i 直接修改文件内容 //先测试,再使用
-r 启用扩展的正则表达式,应作为首个选项
{} 可组合多个命令,以;分隔
#######################

动作
a :新增 a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代 c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行 所以 d 后面通常不接任何东西
i :插入 i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :增加行 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代 可以直接取代字符串
s/lll/zzz/ 将每行的第1个lll替换为zzz
s/lll/zzz/3 将每行的第3个lll替换为zzz
s/lll/zzz/g 将所有的lll都替换为zzz
替换操作的分隔" / " 可改用其他字符 ! @ # $ % ^ & * 便于修改文件路径
, 3到5
; 3和8
###########

输出文本
sed -n 'p'a.txt 输出所有行,等同于cat a.txt
sed -n '4p'a.txt 输出第4行
sed -n '4,7p'a.txt 输出第4~7行
sed -n '4,+10p'a.txt 输出第4行以及其后的10行内容
sed -n '/^bin/p'a.txt 输出以bin开头的行
sed -n 'p;n'a.txt 输出奇数行,n表示读入下一行文本(隔行)
sed -n 'n;p'a.txt 输出偶数行,n表示读入下一行文本(隔行)
sed -n '$='a.txt 输出文件的行数
sed -n '5,$p' rclocal.txt 第5行输出到最后一行
sed -n '$=' rclocal.txt 输出文本的行数
sed -n '/init/!d' rclocal.txt 删除不包括“init”的行

删除文本
sed '3,5d'a.txt 删除第3~5行
sed '/xml/d'a.txt 删除所有包含xml的行
sed '/xml/!d'a.txt 删除不包含xml的行,!符号表示取反
sed '/^install/d'a.txt 删除以install开头的行
sed '$d'a.txt 删除文件的最后一行
sed '/^$/d' a.txt 删除所有空行
sed '$d' rclocal.txt 删除文件的最后一行

替换文本
sed 's/xml/XML/'a.txt 将每行第一个xml替换为XML
sed 's/xml/XML/3'a.txt 将每行中的第3隔xml替换为XML
sed 's/xml/XML/g'a.txt 将所有的xml都替换为XML
sed 's/xml//g'a.txt 将所有的xml都删除(替换为空串)
sed 's/doc/&s/g'a.txt 将所有的doc都替换为docs,&代表查找串
sed '4,7s/^/#/'a.txt 将第4~7行注释掉(行首加#号)
sed 's/^#an/an/'a.txt 解除以#an开头的行的注释(去除行首的#号)

sed '3s/script/SCRIPT/2' rclocal.txt 将第3行内的第2个“script”替换为“SCRIPT”
sed 's/.//2;s/.$//' nssw.txt 第一次替换掉第2个字符,第二次替换掉最后一个字符

sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt 删除文件中所有的数字、行首的空格
sed 's/[A-Z]/(&)/g' nssw.txt 为文件中每个大写字母添加括号
sed '/^HOSTNAME/cHOSTNAME=mysvr.tarena.com' /etc/sysconfig/network c整行替换


/etc/passwd把能登陆的用户提取出来(第一列):sed -n '/bash$/s/:.*//p' /etc/passwd


  

awk  [选项]  ' BEGIN{编辑指令 } {编辑指令} END{编辑指令}'  文件

输出奇数行(行号NR除以2余数为1)的用户记录:  awk -F: 'NR%2==1{print}' passwd.txt
输出前3行文本:                           awk -F: 'NR<=3{print}' passwd.txt

统计/etc/passwd文件中UID大于500的用户个数:   awk -F: 'BEGIN{i=0}{if($3>500){i++}}END{print i}' /etc/passwd
统计/etc/passwd文件中登录Shell不是“/bin/bash”的用户个数:awk -F: 'BEGIN{i=0}{if($7!~/bash$/){i++}}END{print i}'   /etc/passwd
分别统计/etc/passwd文件中登录Shell是“/bin/bash”、“/sbin/nologin”、其他的用户个数: awk -F: 'BEGIN{i=0;j=0;k=0}{if($7~/bash$/){i++} else if($7~/nologin$/){j++}else{k++}}END{print i,j,k}' /etc/passwd
统计/etc/passwd文件内“root”出现的次数:   awk -F [:/] 'BEGIN{j=0}{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}'  /etc/passwd
统计Web访问量排名: awk  '{ip[$1]++} END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log | sort -nr -k 2  
  
查询 file1 里面空行的所在行号: awk ‘{if($0~/^$/)print NR}’ file    or   grep -n ^$ file |awk ‘BEGIN{FS=”:”}{print $1}’  
awk 不显示 4 的倍数行:        awk 'NR%4' NBA.txt  
查看当前系统每个IP的连接数 :   netstat --n |awk '/^tcp/ {print $5}' | awk -F: '{print  $1}' |sort  |uniq -c |sort -rn 

  

标签:xml,passwd,用法,etc,sed,awk,txt,替换
From: https://www.cnblogs.com/zyl88/p/17248262.html

相关文章

  • vue3+ts的toRef和toRefs用法
    <template><div><h2>toRefs的使用</h2><h3>姓名:{{obj.name}}</h3><h3>年龄:{{obj.age}}</h3><hr/><h3>姓名:{{name}}</h3><h3>......
  • @Valid 和 @Validated 注解用法
    没有使用注解验证要求:员工的名称不能为空,且长度不能超过10个字符,那么我们以前的做法大致如下:写完,我们启动项目测试下:(1)名称为空情况(2)正常情况(3)超过长度情况可以看......
  • java的流程控制——Scanner对象用法
    java.util.Scanner是java5的新特征,我们可以通过Scanner类来获取用户的输入基本语法Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取......
  • js策略模式 以及 es6中 ?? 的用法
    策略模式,es6中??的用法constjudge=function(status){ constmap=[ 0:'普通用户', 1:'管理员', 2:'超级管理员' ] returnmap[status]??'未知用......
  • Mybatis配置映射文件中parameterType的用法小结
    原创:在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的输入参数类型即可。param......
  • 正则表达式matcher.group用法
    原来,group是针对()来说的,group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西。 最近学习正则表达式,发现Java中的一些术语与其他地方描述的有......
  • Python基础之sorted()函数用法
    1、简单的排序sorted函数可以对可迭代类型的容器内的数据进行排序lst1=(5,4,3,2,1)lst2=('F','D','Y','e','a','v')#字符串类型的排序按照ASCII的大小进行比较L1......
  • re.sub()用法的详细介绍
    一、前言在字符串数据处理的过程中,正则表达式是我们经常使用到的,python中使用的则是re模块。下面会通过实际案例介绍re.sub()的详细用法,该函数主要用于替换字符串中的匹......
  • MySQL基础用法
    一、mysql启动/停止服务1、启动服务:netstartmysql2、停止服务:netstopmysql 二、mysql连接1、mysql-uroot-p-P13306(未修改默认端口号的不用加......
  • Spring全家桶中各个注解的用法
    1.@ResponseBody@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XM......