Fork me on GitHub

Linux笔记(5)

  grep: global search regular expression(RE) and print out the line;全面搜索正则表达式并把行打印出来。它是一种强大的文本搜索工具,但只能使用基本的正则表达式来搜索文本。

  egrep等同于grep -E:使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。

  fgrep等同于grep -F:搜索固定的字符串,但不解析正则表达式,所以此命令的执行速度也最快。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
###用法
grep [option] 'PATTERN模式' filename...
###PATTERN模式:搜索的字符串及正则表达式参数
###常用的option:
-v:查找不包含匹配项的行
-i:忽略大小写
-c:打印匹配的行数
-n:显示匹配的行号
-E:使用扩展正则表达式即egrep
-F: 即fgrep
-o: 仅显示匹配到的内容而非整行
-R/-r:此参数的效果和指定“-d recurse”参数相同,递归的读取目录下的所有文件,包括子目录
-A N:显示模式匹配到的行以及后面的N行
-B N:显示模式匹配到的行以及前面的N行
-C N:显示模式匹配到的行以及上下的N行
--color :将匹配到的内容以颜色高亮显示,基本上grep都在配置文件中alias grep='grep --color'
###简单的正则表达式
.:匹配任意的单个字符的
[]:指定范围内的任意的单个字符
[0-9] [[:digit:]]:表示匹配0到9的任意单个数字、两种表示方法都可以
[a-z] [[:lower:]]:表示匹配小写的a到z的任意单个字母、即a-z
[A-Z] [[:upper:]]:表示匹配大写的A到Z的任意单个字母、即A-Z
[[:alpha:]]:表示英文大小写字母、即:a-z,A-Z
[[:space:]]:表示包含的空白字符、即空格键,tab键
[[:alnum:]]:表示包含数字大小写字母、即0-9,A-Z,a-z
[[:punct:]]:表示包含标点符号、即:" ' ? ! ; : # $ . ..
[^]: 表示指定范围外的任意单个字符、就是使用了脱字符取反
字符的次数匹配:用来匹配其前面的字符的次数的
*:(星号)匹配其紧挨着星号的字符出现任意次
例:x*y就是x可以出现意次、包括0次
.*:(点星)匹配任意长度的任意字符
\?:表示其前面的字符出现0次或者1次、\是转义字符
例:x\?y:可以匹配到的只有xy和y
\{m\}:匹配m次
例:x\{4\}y表示y前面的x出现4次就可以被匹配到
\{m,n\}:至少m次,至多n次
例: x\{1,4\}y表示y前面的x出现1到4次就可以被匹配到
\{m,\}:至少m次
\{0,n\}:至多匹配n次、0不可以省略
位置锚定符:用于指定字符出现的位置
^:用于锚定行首
例:(^string) grep '^root' /etc/passwd
$:用于锚定行尾
例:(string$) grep 'bash$' /etc/passwd
^$:空白行、查找一个文件中所出现的空白行 ^hello$表示只有hello的行
单词的锚定:
\<char:锚定词首,\<[r]表示一行以r开头的单词都可以匹配、也可以使用\b表示
char\>:锚定词尾,一行以r开头的单词都可以匹配、\b
\<hello\>:表示精确锚定hello这个单词
\<h…o\>:表示以h开头、以o结尾、中间跟了任意三个字符的单词
分组元字符:
\(\):分组 \是转义字符
例:\(ab\)*xy,ab括起来表示一个组了,xy前面的ab组现出任意次,可以被匹配到
引用: 对分组的字符块进行引用
\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中模式所匹配到的内容
\2:后向引用,引用前面的第二个左括号以及与之对应的右括号中模式所匹配到的内容
例:\(a.b\)xy\1 可以匹配到的有(abxyab不可以匹配到)
akbxyakb,a3bxya3b,aYbxyaYb
###拓展正则表达式很多地方和基本正则表达式相同,有些地方少了转义字符 \
元字符:字符匹配
.:匹配任意单个字符
[]:指定范围内的任意单个字符
次数匹配:
*:匹配其紧挨着星号的字符出现任意次
?:表示其前面的字符出现0次或者1次
+:匹配其前面的字符至少1次
{m}:匹配其前面的字符m次
{m,n}:至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
位置锚定:
^:行首锚定
$:行尾锚定
\<:词首
\>:词尾
分组:
():分组
|:或者
例:ab|xy意思为ab或者xy a(b|x)y意思为aby或者axy
###示例
grep 'test' free* 显示所有以free开头的文件中包含test的行
grep '[a-z]\{5\}' free 显示free文件中所有包含至少有5个连续小写字符的字符串的行
grep -c "test" free 显示free文件中含有test的行数
grep -n "test" free 显示free文件所有匹配test的行和行号
grep '^[^test]' free 不匹配行首是test的行
grep -o "test" free 只显示匹配到的test
grep –v "test" free 显示不包含test的行
grep -R "test" . 显示当前目录(含子目录)下所有文件中匹配test的行
grep -c "^$" free 统计空白行的行数

  对于 Linux 环境问题缺库少库解决办法就是缺啥补啥。

  Linux一般的配置文件在 /etc/sysconfig/network 目录下,修改配置文件不会立即生效,但重启网络服务或主机会生效。

  状态代码:

  1xx:纯信息

  2xx:成功类信息

  3xx:重定向类信息

  4xx:客户端错误类信息

  5xx:服务器端错误类信息

  在vim中直接查看文件编码:set fileencoding

  使用 iconv经行文件编码转换

1
iconv filename1 -f encoding -t encoding -o filename2

  使用SCP传输文件:

  scp username@IP:filepath filepath

  scp -p port filepath user@IP:pathname filepath

------ 本文结束 ------