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'
posted on 2020-03-31 19:10  112358D  阅读(155)  评论(0)    收藏  举报