第二部分shell编程2正则(grepegrepsedawk)
一、grep/egrep
1. 语法+选项
语法: grep [-cinvABC] 'word' filename
-c :打印符合要求的行数
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行 ,取反===
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
-r : 会把目录下面所有的文件全部遍历
-i :不区分大小写
-o :只过滤符合条件的字段
2. 例子介绍
过滤出带有某个关键词的行并输出行号 grep -n 'root' 1.txt
过滤出不带有某个关键词的行并输出行号grep -n -v 'root' 1.txt
过滤出所有包含数字的行 grep '[0-9]' 1.txt
过滤出所有不包含数字的行 grep -v '[0-9]' 1.txt
去除所有以'#'开头的行 grep -v '^#' 1.txt ^表示以什么开头,就是剩下不以#号开头的行了
去除所有空行和以'#'开头的行 grep -v '^$' 1.txt |grep -v '^#' ^$代表以空行开头,| 并且的意思====
过滤出以英文字母开头的行 grep '^[a-zA-Z]' 1.txt
过滤出以非数字开头的行 grep '^[^0-9]' 1.txt ^0-9代表非数字的意思
去除掉以数字开头剩下的行 grep -v '^[0-9]' 1.txt
=======================================
过滤任意一个或多个字符
grep 'r.o' 1.txt; grep 'r*t' 1.txt; grep'r.*t' 1.txt
. 表示任意一个字符;*表示零个或多个前面的字符 ;.*表示零个或多个任意字符,空行也包含在内
=========================================
指定过滤字符次数 grep 'o\{2\}' 1.txt !!!!
grep -E ==egrep
cgrep -E 'r?o' 1.txt E表示可以用特殊符号?
cgrep -E 'r?o' 1.txt == cgrep 'o' 1.txt || cgrep 'ro' 1.txt
grep --color 'root' 1.txt
alias cgrep='grep --color' 也可以写在.bashrc里面 用source .bashrc 重置一下
grep -E ==egrep
3. egrep
egrep工具 是grep工具的扩展
egrep 'o+' 1.txt 表示1个或1个以上前面字符
egrep 'o?' 1.txt 表示0个或者1个前面字符
egrep 'roo|body' 1.txt 匹配roo或者匹配body ======
egrep 'r(oo)|(at)o' 1.txt 用括号表示一个整体
egrep '(oo)+' 1.txt 表示1个或者多个 'oo'
egrep 'sbin' 1.txt |egrep 'post' 并且的意思=======!!!!!!和&&有什么区别
awk -F ':' '$3>"5" && $3<"7"' 1.txt
egrep 'o{2}' 1.txt 表示筛选o出现几次的行
4. . * + ? 总结
. 表示任意一个字符(包括特殊字符)
* 表示零个或多个*前面的字符
.* 表示零个或多个任意字符(包含空行)
+ 表示1个或多个+前面的字符
? 表示0个或1个?前面的字符
其中 + ? grep不支持,egrep才支持。
? + () | 这几个字符才需要脱意 ==========
二. sed --- 一般替换和打印行
打印指定行 sed '10'p -n 1.txt; sed '1,4'p -n 1.txt; sed '5,$'p -n 1.txt
n就是把匹配到的p是打印的意思
打印包含某个字符串的行 sed -n '/root/'p 1.txt 可以使用 ^ . * $等特殊符号==
-e 可以实现同时进行多个任务 sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;实现 sed '/root/p; /body/p' -n 1.txt
删除行
sed '/root/d' 1.txt; sed '1d' 1.txt; sed '1,10d' 1.txt
sed -i '/root/d' 1.txt 这里直接就删除了文件的东西了
替换 sed '1,2s/ot/to/g' 1.txt, 其中s就是替换的意思,g为全局替换,否则只替换第一次的,/也可以为 #, @ 等
sed 's/BASH/1212/gi' 1.txt i表示不区分大小写的替换========只在替换的时候用===========
清楚空行,在内容前面和后面添加内容
sed '/^$/d; s/^/AAA/g; s/$/BBB/g' input.txt
删除所有数字 sed 's/[0-9]//g' 1.txt ===
删除所有非数字sed 's/[^0-9]//g' 1.txt
调换两个字符串位置 head -n2 1.txt |sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/'
在test.txt 20行到末行最前面加 'aaa:'
sed -r '20,$s#(^.*$)#aaa:\1#g' 1.txt (^.*$)表示一整行,\1表示(^.*$)
直接修改文件内容 sed -i 's/ot/to/g' 1.txt
grep -E ;sed -r ; egrep 都表示才可以用后面的脱意符号
sed练习题:
把/etc/passwd 复制到/root/test.txt,用sed打印所有行
打印test.txt的3到10行 sed 3,10p -n test.txt
打印test.txt 中包含 'root' 的行 sed /root/p -n test.txt
删除test.txt 的15行以及以后所有行 sed '3,$d' test.txt
删除test.txt中包含 'bash' 的行 sed '/root/d' test.txt
替换test.txt 中 'root' 为 'toor' sed 's/root/toor/g' test.txt
替换test.txt中 '/sbin/nologin' 为 '/bin/login'
sed 's#/sbin/nologin#/bin/login#g' 1.txt
删除test.txt中5到10行中所有的数字
sed '5,10s#[0-9]##g' 1.txt =======
删除test.txt 中所有特殊字符(除了数字以及大小写字母)
sed 's#[^0-9a-zA-Z]##g' 1.txt
==============================================================
把test.txt中第一个单词和最后一个单词调换位置
把test.txt中出现的第一个数字和最后一个单词替换位置
把test.txt 中第一个数字移动到行末尾
==============================================================
在test.txt 20行到末行最前面加 'aaa:'
sed -r '20,$s#(^.*$)#aaa:\1#g' 1.txt (^.*$)表示一整行,\1表示(^.*$)
==================
sed -r '20,$s#(^.*$)#\12#g' 1.txt 从20行开始,在每一行追加2
三. awk--- 一般查找指定段的值和匹配,{}里面的值要print, ‘’不需要print直接可以运算
截取文档中的某段 awk -F ':' '{print $1}' 1.txt
awk -F: '{print $1,$2,$3}' 1.txt
也可以使用自定义字符连接每个段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
匹配字符或字符串 awk '/oo/' 1.txt
针对某个段匹配 awk -F ':' '$1 ~/oo/' 1.txt ~代表模糊匹配
多次匹配
awk -F ':' '/root/; $1 ~/aming/; $3 ~/50/' 1.txt
awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt
echo -e "1\n10\n100\nx" |sort e代表可以识别\n ======
条件操作符==, >,<,!=,>=;<=
awk -F ':' '$3=="0"' 1.txt;
awk -F ':' '$3>="500"' 1.txt;
awk -F ':' '$3+0>=500' 1.txt; 强制转换为数字
awk -F ':' '$7!="/sbin/nologin"' 1.txt;
awk -F ':' '$3<$4' 1.txt ;
awk -F ':' '$3>"5" && $3<"7"' 1.txt ======
awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt
awk内置变量 NF(有几段) NR(第几数)
head -n3 1.txt | awk -F ':' '{print NF}'
head -n3 1.txt | awk -F ':' '{print NR}'
打印20行以后的行awk 'NR>20' 1.txt
awk -F ':' 'NR>20 && $1 ~ /ssh/' 1.txt =====
更改某个段的值awk -F ':' '$1="root"' 1.txt ======
数学计算, 把第三段和第四段值相加,并赋予第七段
awk -F ':' '{$7=$3+$4; print $0}' 1.txt ===$0是整行的意思
可以这样子写 awk -F ':' '$7=$3+$4’ 1.txt
计算第三段的总和 awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也可以使用if关键词 awk -F ':' '{if ($1=="root") print $0}' 1.txt
$0代表整体
用外边的变量:
a=3; awk -F: '$3="'$a'"' 1.txt ============
awk练习题
用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)
awk '{print $0}' 1.txt
查找所有包含 'bash' 的行
用 ':' 作为分隔符,查找第三段等于0的行 awk -F: '$3==0 {print $0}' 1.txt
用 ':' 作为分隔符,查找第一段为 'root' 的行,并把该段的 'root' 换成 'toor' (可以连同sed一起使用)
awk -F: '$1=="root" && $1="toor"' 1.txt ====
awk -F: '$1=="root" && $1="toor"{OFS=":" ;print}' 1.txt OFS是内置的一个变量
用 ':' 作为分隔符,打印最后一段 !!!!!
awk -F ':' '{print $NF}' 1.txt
打印行数大于20的所有行 awk 'NR>20' 1.txt
用 ':' 作为分隔符,打印所有第三段小于第四段的行
awk -F ':' '$3<$4' 1.txt
用 ':' 作为分隔符,打印第一段以及最后一段,并且中间用 '@' 连接 (例如,第一行应该是这样的形式 'root@/bin/bash' )
awk -F: '{print $1"@"$NF}' 1.txt |head -n3
awk -F: '{OFS="@" ;print $1,$7}' 1.txt
用 ':' 作为分隔符,把整个文档的第四段相加,求和
awk -F ':' '{(tot=tot+$4)}; END {print tot}' 1.txt
第二部分shell编程2正则(grepegrepsedawk)的更多相关文章
- 《Linux.Shell编程从入门到精通》读书笔记
第一章 第一个Shell程序 以 #!解析器名称 开头,表示选择哪个解释器解释shell脚本 source命令 export命令 env命令 unset命令 第二章 shell编程基础 函数传递 标准 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】
第二章Shell的结构 “Shell 编程”的大伞之下有大量的API函数和COM接口.这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程.函数和接口并不是两种提供相同功能 ...
- 2. Shell编程第二讲
(1) 条件测试: test [ 命令 test 或 [ 可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- linux中shell编程
shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...
- Shell编程(week4_day3)--技术流ken
本节内容 1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变 ...
- [No000014A]Linux简介与shell编程
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
随机推荐
- DOM中的事件傳播機制
要講到事件傳播機制之前,首先要瞭解的是 什麼是事件? 事件,發生在靜態頁面與動態行為之間的交互行為.是JavaScript 和 HTML的交互是通过事件实现的.比如,按鈕的點擊,鼠標的滑過,鍵盤的輸入 ...
- 使用MATLAB设计FIR滤波器
1. 采用fir1函数设计,fir1函数可以设计低通.带通.高通.带阻等多种类型的具有严格线性相位特性的FIR滤波器.语法形式: b = fir1(n, wn) b = fir1(n, wn ...
- Git使用列表(四)
最近,由于自己的一个项目,导致自己的关于自己的要使用Git的很多的命令,突然发现自己的git的还有许多不知道的东西 不过,在这个工作的过程中,也发现自己的一些很大的缺陷,就是自己题目理解力有限,明明就 ...
- 深圳Uber优步司机奖励政策(1月4日~1月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- stm32中如何进行printf重定向用于串口调试输出
1 在main中包含stdio.h 文件 2 Target选项框里选Use MicroLib 选项 3 在main中添加UART1_Configuration()初始化的代码 Uart1初始化,voi ...
- DSP5509之采样定理
1. 在实际种信号是模拟连续的,但是AD采样确实离散的数字的,根据采样定理,采样频率要是模拟信号的频率2倍以上采样到的值才没问题. 2. 打开工程 unsigned ]; main() { int i ...
- 测试FlowTable
1.确定openvswitch模块加载#lsmod |grep oepnvswitch#/sbin/modprobe openvswitch 2.启动配置:1)默认配置rm -f /usr/local ...
- CentOS安装JMeter
mkdir /usr/local/jmeter 新建jmeter目录 cd /usr/local/jmeter 进入jmeter目录 wget https://archive.apache.org/d ...
- Codeforces Round #495 (Div. 2) Sonya and Matrix
正常没有正方形的限制下,值为i的点个数4i 那么从0开始遍历,第一个不为4i的值就是min(x, y) 由于对称性我们姑且令x为这个值 我们先列举n*m=t的各种情况 对于一对n, m.我们已经知道n ...
- 【system.file】使用说明
对象:system.file 说明:提供一系列针对文件操作的方法. 注意:参数中的filePath 均为相对网站根目录路径 目录: 方法 返回 说明 system.file.exists(filePa ...