grep--------------------------------------------------
grep查找字符
grep | 含义 |
---|---|
[:alnum:] | 代表英文大小写字母及数字 |
[:alpha:] | 代表英文大小写字母 |
[:blank:] | 代表空格和 tab 键 |
[:cntrl:] | 键盘上的控制按键,如 CR,LF,TAB,DEL |
[:digit:] | 代表数字 |
[:graph:] | 代表空白字符以外的其他 |
[:lower:] | 小写字母 |
[:print:] | 可以被打印出来的任何字符 |
[:punct:] | 代表标点符号 |
[:upper:] | 代表大写字母 |
[:space:] | 任何会产生空白的字符如空格,tab,CR 等 |
[:xdigit:] | 代表 16 进位的数字类型 |
🌰查找小写字母
$ grep -n '[[:lower:]]' regular_express.txt
grep查找特定字串
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
🌰查找有'the'的字串
$ grep -n 'the' regular_express.txt
# 下面这种查找忽略了大小写
$ grep -in 'the' regular_express.txt
[],-与^
- []中包含的任意一个字符。只能是一个。
- 字符组支持由连字符“ - ”来表示一个范围。当“ - ”前后构成范围时,要求前面字符的码位小于后面字符的码位。
- [^...] 排除型字符组。排除后面的字符。
🌰找出'food'和'good'
$ grep -n '[fg]ood' regular_express.txt
注意^的位置
- '^[A-Z]' 表示以大写字母开头。
- '[^A-Z]' 表示除了大写字母 A-Z 的所有字符。
特🌰
1.'^$' : 过滤掉空白行
2.'^#' :过滤掉注释行(以#号开头)
一些加转义符的查找
- {n,m} 表示找出 n 到 m 个前一个 RE 字符
- {n,} 表示 n 个以上的前一个 RE 字符
🌰查找g后面接2到5个o,然后再接g的字符串
$ grep -n 'go\{2,5\}g' regular_express.txt
sed---------------------------------------------------
非交互式 / 不会修改文件,除非使用shell重定向来保存结果 / 默认情况下所有的输出行都被打印到屏幕上 / 逐行处理文件(或输入),并将结果发送到屏幕
具体过程:
1.把当前正在处理的行保存在一个临时缓存区中(也称为模式空间)
2.处理临时缓冲区中的行,完成后把该行发送到屏幕上
sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。
处理完输入文件的最后一行后,sed便结束运行。
sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
🌰
#删除2~5行
$ nl regular_express.txt | sed '2,5d'
#在第2行后增加test
$ nl regular_express.txt | sed '2a test'
#在第2行前增加test
$ nl regular_express.txt | sed '2i test'
#把第2~5行改成指定内容
$ nl regular_express.txt | sed '2,5c No 2-5 number'
#打印2~5行,-n表示“安静模式”,只显示2~5行
$ nl regular_express.txt | sed -n '2,5p'
🌰打印ip地址
$ /sbin/ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'
$ /sbin/ifconfig eth0 |grep 'inet '| sed 's/.\{0,9\}://'
egrep/grep -E-----------------------------------------
*:>=0(grep)
?:<=1
+:>=1
支持用‘|’找出多个字串;‘()’找出群组字串
$ echo 'AxyzxyzxyzxyzC'|egrep 'A(xyz)+C'