SED_AWK_正则

AWK

awk [选项] ‘条件{指令}’ 文件      //后面不一定要跟文件,可以接管道

命令 | awk [选项]

条件:

1,/正则/(模糊匹配)

#awk ‘/root/’ /etc/passwd           //包含root的行

#awk -F: ‘$5~/root/’ /etc/passwd     //$5~代表在第5列里包含root

#awk -F: ‘$5!~/root/’ /etc/passwd    //代表第5列里不包含root

2,字符和数字比较(==,!=,>=,<=,<,>)

#awk -F: ‘$1==”root”{print $3}’ /etc/passwd

#awk -F: ‘$3<1000{print $1}’ /etc/passwd                //找出所有的系统用户

3,逻辑符号&&,||

#awk -F: ‘$3>10&&$3<20’ /etc/passwd

#awk -F: ‘$3>=1000||$3<=10’ /etc/passwd

#seq 300 | awk ‘$1%3==0||$1~/3/‘       //求300内,可以被3整除或包含3的数

指令{print行}                  //没条件则默认打印全部

print $0                       一整行

print $1                       第1列

print $2                       第2列

print NF                      当前行有几列

print NR                     当前行的行号

print $NF                    打印每一行的最后一列

#awk -F: ‘NR==10,NR=20{print}’    //可以通过这样来打印10-20行的内容

#awk -F: ‘NR>9&&NR<21{print}’     //这样打印10-20行的内容也可以

awk默认的分隔符是空格或Tab

#awk -F: ‘{print $1}’ /etc/passwd     //以:为分隔符

#awk -F‘:|[ ]‘ ‘{print $1}‘                               //这里以:和空格为分隔符,要注意awk多分隔符的问题

#awk ‘BEGIN{}条件{}END{}’ 文件

BEGIN{}里面的指令,在读取文件内容之前就执行,仅执行1次

条件{}里面的指令,读文件过程中执行,执行N次(文件行数)

END{}里面的指令,在读取文件后执行,仅执行1次

#awk ‘BEGIN{print 1.3*2.3}’   //后面不用加文件,可以作为计算器来用

#awk ‘BEGIN{x=3;print 22/x}’   //以;分隔命令

#awk ‘/bash$/{x++} END{print x}’ /etc/passwd  //统计能登录的用户

#awk -F: ‘BEGIN{print "用户名\tUID\t家目录"}{print $1"\t"$3"\t"$6}‘ /etc/passwd   | column -t            //以”\t”为分隔符,打印后按制表符,管道column -t能让输出更美观。

# awk -F: ‘$1==ENVIRON["USER"]{print}‘ /etc/passwd   //输出当前用户的用户信           息,ENVIRON["USER"] 引用全局变量USER

如何在awk中引用变量:

方法一:”’$A’”——双引号+单引号+$变量+单引号+双引号

方法二:”’”$A”’”——两边都用”’”包围,双引号+单引号+双引号

方法三:如果是全局变量,ENVIRON["USER"] 引用变量USER,不是全局变量的话先用export命令变成全局变量

awk的高级应用[支持if,for,while] if是命令,必须写在基本格式的{}里

if() {} else{}

if() {} else if() {} else if() {} else {}

#awk -F: ‘{if($3>=1000) {x++} else {y++}}END{print "普通:"x," 系统:"y}‘         /etc/passwd

blog.51cto.com 丁丁历险

while(){}

#awk -F: ‘{i=1;while(i<=NF){if($i=="root"){x++}i++}}END{print x}‘   /etc/passwd                                //以后写的时候最好用竖结构写好再套进去

sed 文本编辑器(非交互)

语法:

sed [选项] ‘条件指令’ 文件

选项:

-r  支持扩展正则

-n  一般和p打印一起用

-i       直接修改文件内容

-{}     可组合多个命令,以分号隔开

条件:行号,/正则/,无条件

指令:

s:替换   sed -n ‘s/old/new/’           将每行的第1个old替换为new

sed -n ‘s/old/new/3’                  将每行的第3个old替换为new

sed ‘1s/$/hello/;3s/$/hello’     在第1,3行的后面添加hello字符

sed -n “/<name>/s/rhel6/rhel7/”    把包含<name>的行的rhel6替换为rhel7

sed -n ‘s/old/new/g’                  将所有的old都替换为new

sed -n ‘p;n’                                   输出奇数行

sed -n ‘n;p’                                   输出偶数行

sed -n ‘$=’                                    输出文件的行数

sed -n ‘4,+10p’                            输出第4行及其后的10行内容

替换操作的分隔”/”,可用其它字符,如#,&等等,便于修改文件路径

d:删除

sed ‘/xml/d’                                 删除所有包含xml的行

sed ‘/xml/!d’                      删除不包含xml的行,!符号表示取反

p:打印

i                  行前插入文本  sed -i ‘3iXXX’ 文件    //写在第3行

a                行后插入文本  sed -i ‘3aYYY’ 文件     //写在第4行

sed ‘$a192.168.4.5 svr5.tarena.com svr5’ /etc/hosts

//在文档的最后一行添加一行,内容为”192.168.4.5 svr5.tarena.com svr5”

c                 替换当前行       sed ‘3c XX’ 文件       //整行替换

sed ‘/^HOSTNAME/cHOSTNAME=mysvr.tarena.com’ /etc/sysconfig/network                                          //把以HOSTNAME开头的行整行替换为HOSTNAME=mysvr.tarena.com

不常用r,w,H,G        sed ‘2r /etc/hosts’ 文件名——在第2行添加/etc/hosts的内容

sed ‘w /root/new.txt’ 文件名——把文件全部内容写到/            root/new.txt里面

H追加复制,h覆盖复制;G追加粘贴,g覆盖粘贴

sed ‘2H;5G’ 文件名

sed逐行处理器,处理大文件效率高

sed也可以接管道

指令:增,删,改,查。实现对文本的输出,删除,替换,复制,剪切,导入,导出

条件:

行号

/正则/               /abc/d                删除包含abc的行

打印指令

#sed -n ‘/local*/p‘ rclocal.txt             //显示包含”loca”的行,l可有可无

#sed -n ‘/local$/p‘ rclocal.txt           //注意这两句的区别,上面是local后面可                                                                                           以有东西,下面是local后面不可以有东西

#sed -n ‘5,$p‘ rclocal.txt               //输出第五行到最后一行

删除指令

#sed ‘2d’ /etc/passwd

#sed ‘/正则表达式/d’ /etc/passwd

\(\)复制并保留——基本正则

()复制并保留——扩展正则

abcdoabcd-abcdpabcd

#egrep “(abcd)o\1-\1p\1”             //(abcd)代表复制,\1代表引用

替换指令-变相删除操作

#sed ‘1s/old/new/’ 文件

#sed ‘s/old/new/’ 文件

#sed ‘s/.//2;s/.$//‘ nssw.txt             //删除文中每行的第二个和最后一个字符

#sed -r ‘s/^(.)(.)(.*)/\2\1\3/‘ nssw.txt   //将文件中每行的第一个、第二个字符互换

每行文本拆分为“第1个字符”、“第2个字符”、“剩下的所有字符”三个部分,然后通过替换操作重排顺序为“2-1-3”,用-r才能(.)定义,然后\1来引用

#sed -r ‘s/[0-9]//g;s/^( )+//‘ nssw2.txt  //删除所有数字、行首空格,+代表可能多个空格

-r表示应用扩展正则

#sed ‘s/[A-Z]/(&)/g‘ nssw.txt                 //为文件中每个大写字母添加括号

使用“&”可调用s替换操作中的整个查找串

# sed -r -i ‘/^IPADDR/s/192.168.4.(.*)/172.16.16.\1/‘

/etc/sysconfig/network-scripts/ifcfg-eth0

要求只修改网段地址时,可以利用扩展正则表达式的 \1、\2、……等调用,分别对应此前第1个、第2个、…… 以 ()包围的表达式所匹配的内容。

#sed -n ‘$=’ a.txt            //输出文件的行数,$指代最后一行的行数

#sed ‘$d’ a.txt               //删除文件的最后一行

#sed ‘/^$/d’ a.txt            //删除所有空行

#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开头的替换为an,去除行首的#,用于ftp配                                                                                                          置文件能允许匿名上传和建文件夹

UREC=$(sed -n ‘1p’ /etc/passwd)     //取第一行的记录

正则表达式

1,基本正则(模糊查找)

^                          开始

$                          结尾                   ^$表示空行

[]                         集合(取任意单个),里面的元素没有前后顺序[a-z] [A-Z] [0-9]                                                                                                                             [a-fmox-z0-5]=[abcdefmoxyz012345]

比如要查找tast和test,t[ae]st

[^]                       对集合取反[^a-z],a-z都不需要

[^A-Z]                 匹配包括非大写字母的行

^[^a-z]               匹配不以小写字母开头的行

.                           任意单个字符

*                          前一个字符出现了n次(包括0次),不能单独用,a*表示a出现任意次。the*,只匹配前一个                        字符

.*                        多个任意字符

\{n,m\}               前一个字符出现了n到m次,a\{1,3\},a出现1到3次

\{n,\}                  前一个字符出现了n到任意次

\{n\}          前一个字符出现了n次,刚好n次

\(\)

grep “正则” 文件

-i 不区分大小写

-v 反查verse

-n 显示行号number

-c 统计找到了几行count

-q 安静地查找,找不找得到都不显示,一般脚本才需要用这个,配合echo $?使用。

vim进去后也支持正则

grep -v “^$” /etc/postfix/main.cf /etc/postfix/main.cf   //检索空白行

2,扩展正则(简化基本正则,扩张新内容)

{n,m}         前面的内容出现了n到m次

()                代表整体   c(ab)?的结果是c或者cab

?                可有可无0-1次

+                前面的内容出现了至少1次 扩展?+等于基本的*

(|)              或者         //grep (test|taste)

基本正则:兼容性强但麻烦,几乎所有软件都能使用基本正则

扩展正则:简单但兼容性差,不是每个软件都能使用扩展正则

#grep “\bthe\b” a.txt    //检索the这个单词,\b是不能有字符的意思

注意和\bthe,the\b的区别。

原文地址:https://www.cnblogs.com/MR-HAIBO/p/9261252.html

时间: 2024-10-05 04:55:57

SED_AWK_正则的相关文章

python学习第十五节(正则)

正则的贪婪匹配 非贪婪模式按照最小重复数取 非贪婪匹配 正则的方法 re.split 正则分割 分割次数 保留分隔符,用一个括号套住分隔符 sub 替换字符串需要三个参数,要替换的内容(正则),新内容,字符串 分开写用compile可以写一次规则然后多次匹配,好处就是方便灵活. 返回一个迭代器对象 爬虫爬豆瓣电影信息,用正则 模块 configparser功能:创建成下面类型的文件 使用方法 读操作 DEFAULT是默认信息,不需要打印,默认信息是所有段落信息的共享信息. 用上图方法判断字段是否

python基础-正则2

正则函数 Python提供re模块,包含所有正则表达式的功能 由于python的字符串本身也有\转义,所以需要注意: s = "ABC\\-001" 对应的正则表达式应为:'ABC\-001' 用python的r前缀,就不用考虑转义问题 可以使用 s = r'ABC\-001' 对应的正则表达式为:'ABC\-001' match() 判断是否匹配成功,如果匹配成功,返回一个match对象,否则返回None test = "用户输入的字符串" if re.match

C#常用的正则工具类写法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace ConsoleApplication1 { /// <summary> /// 字符串正则匹配帮助类 /// </summary> public static cla

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

正则验证手机号(联通,电信,移动手机号),不包含座机号,作为会员登陆(正则验证) winform

public static class RegxCheck { /// <summary> /// 正则表达式验证是否为手机号 /// </summary> /// <param name="telNum">需要验证的手机号</param> /// <returns></returns> public static bool CheckTelNum(string telNum) { //电信手机号码正则 strin

看看你的正则行不行——正则优化一般的json字符串

json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示 首先是对输入进行转换,如果是对象则转化为规范的json字符串,不是对象时,先将字符串转化为对象(防止不规范的字符串),然后再次转化为json串.其中json为输入. if (typeof json !== 'string') { json = JSON.stringify(json); } el

正则表达示

这里对正则表达示进行一定程度的总结.为避免太过纠结,这里避开一些 鸡肋 的正则用法. 更多文档参考官方文档 http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 字符 x 字符 x \\ 反斜线字符 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义

js jquery版本的 金额千分位转换函数(非正则,效率极高)

没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专门写了一个纯数值处理最后输出字符串个 金额千分位处理函数,并封装成jQuery函数包,处理时效率很高,可高频率的使用,直接上代码.还有min压缩版本可点击连接下载. 如果你不是jQuery环境,直接把源码拿出来,重新封装到自己的函数中能够就能用. 源码以及min包下载地址:jQuery.format

【分享】利用Apache的Htaccess Files命令限制访问文件类型,Files正则

如果你在你的模板文件夹中有很多PSD HTML模板,那么用接下来这个htaccess文件可以保护限制访问: 文件D:\WebSite\ZBPHP.COM\www\Tpl\.htaccess 全部源码如下: <Files ~ "\.(html?|tpl|psd|zip|rar)$"> Order Allow,Deny Deny from all </Files> [分享]利用Apache的Htaccess Files命令限制访问文件类型,Files正则,布布扣,b