1.输出重定向
- 标准输出:是将信息输出在终端
- 标准错误输出:在执行命令的过程中所产生的错误也是输出在终端
- 标准输入:从键盘输入
1.2 标准输出重定向
作用:将本来要显示在终端上的信息重定向到一个文件中
实现方法:
- > 将文件中原有的内容全部删除
- >> 在文件原有的基础后追加新的内容
1.3 标准错误输出重定向
- 2 >
- 2>>
例:将正确和错误的信息都保存到同一个文件中
ls /dad / &> 1.txt
2. 通配符
- * #任意长度的任意字符
例:删除根下以a开头的文件
rm -rf a*
- ? #一个长度的任意字符
例:删除根以下文件名第二个是a的文件
rm -rf ?a
- ; #链接多个命令
例:
cd - ; cd -
- && #只有前面的命令执行成功,后面的命令才会执行
- || #只有前面的命令执行失败,才会执行后面的命令
- # #注释行(描述信息,不执行)
- | #传递命令的执行结果
- ~ #家目录
- - #上次所在的目录
- $ #变量前加的符号
- / #路径分隔符(或者根)
- > >> #重定向
- << #用来打印菜单
例:
cat << EOF
> 1
> 2
>EOF
引号:
- ' ' #弱引用,引用的内容原样输出
- " " #强引用,引用变量会变成变量的值
- ` ` #命令替换
- . #表示当前目录
- .. #上一级目录
- { } #花括号展开
例:
mkdir {1..10}.dir
展开后为创建1.dir 2.dir 3.dir 4.dir 5.dir 6.dir 7.dir 8.dir 9.dir 10.dir目录
3.正则表达式
构成:一堆特殊符号和字母构成--元字符
作用:通过对文本中的内容进行过滤筛选,然后对文本中的内容进行过滤筛选
通配符和正则表达式的区别
通配符是对文件名进行区别,正则表达式是对文件的内容进行匹配
3.1 正则表达式的种类:
- 基础正则表达式
- 扩展正则表达式
3.2 通常结合三个命令来使用
- gerp
- sed
- awk
3.2.1 grep
作用:对文件中的内容进行过滤
格式:
grep [选项] 匹配内容 文件名
选项:
- -v #取反
- -o #仅仅显示出所匹配的内容
- -E #使用扩展
- -i #忽略大小写
例1:从a.txt文件中过滤出不包含root的行
grep -v "root" a.txt
例2:从a.txt文件中过滤出包含root的行
grep "root" a.txt
例3:从a.txt文件中过滤出仅仅显示root的行
grep -o "root" a.txt
例4:统计a.txt文件中有多少个root
grep -o "root" a.txt | wc -w
3.3 正则中元字符
3.3.1 匹配单个字符
- . #表示任意一个字符(可以空格,逗号,字母,数字...)
例:匹配a前面有一个字符的行
grep ".a" 11.txt
- [ ] #表示范围内中的其中一个
- [123456] #表示匹配其中的任意一个数字
- [0-9] #匹配所有的数字
- [A-Z] #匹配所有的大写字母
- [a-z] #匹配所有的小写字母
- [a-Z] #匹配所有的字母
例1:匹配文件中包含数字的行
grep [0-9] file
例2:匹配文件中包含a的行
grep "a" file
3.3.2 用字符集的方式表达
- [[:space:]] #表示一个空格
- [[:digit:]] #表示任意一个数字
- [[:lower:]] #表示任意一个小写字母
- [[:upper:]] #表示任意一个大写字母
- [[:alpha:]] #表示任意一个字母
- [[:alnum:]] #表示任意一个数字+字母
- [[:punct:]] #表示任意一个标点符号
例1:匹配一个包含小写字母的行
grep [a-z] file
grep [[:lower:]] file
例2:匹配以#开头的行
grep ^[#] file
例3:匹配除了a以外的任意字符
grep [^a] file
例4:过滤没有qaz的行
grep [^qaz] file
3.3.3 显示匹配到的行
- -An #显示匹配到的内容行的后n行
- -Bn #显示匹配到的内容行的前n行
- -Cn #显示匹配到的内容行的前后各n行
例:匹配到包含root的行的前3行
grep -B3 "root" file
3.3.4 匹配次数
- * #前面字符出现了任意次数(0,1,n)
例:a*
- .* #表示任意长度的任意字符
例:a.*b
grep "a.*b" 11.txt
- ? #表示前面字符出现最多一次
例1:b前面的a至少出现m次,最多出现n次
a \{m,n\}b
-E a{m,n}b
例2:过滤b前面的a最少一次,最多不限
grep -E "a{1, }b" 11.txt
例3:过滤b前的a最多1次
grep -E "a{1,1}b" 11.txt
grep -E "a?b" 11.txt
3.3.5 位置锚定
- ^ #表示以n为开头的行
- $ #表示以n为结尾的行
例:以yum为结尾的行
grep "yum$" file
- \<n #表示单词首部
- n\> #表示单词尾部
- ^$ #表示空白行
3.3.5 分组
\( \) #将内容当做一个整体看待
\1
\2
例:在11.txt中过滤出现过两个相同数字的行
grep "\([[:digit:]]).*\1" 11.txt
4. 扩展正则表达式
4.1 基础正则
grep [选项] 匹配内容 文件名
4.2 扩展正则
grep -E 匹配内容 文件名
egrep 匹配内容 文件名
{1, }等同于+ #其前面的字符至少出现过1次
4.3 或 |
例:过滤出开头是a(不区分大小写)的行
egrep "^(a|A)" 11.txt
egrep "^[aA]" 11.txt