正则表达式针对文本内容
grep:针对文本内容进行过滤,支持正则表达式,针对行来处理
元字符
.:匹配任意单个字符,可以是汉字
():分组
[]:任意范围的单个字符
使用正则表达式要用’ '引起来
表示次数
正则表达式匹配连续出现
*:任意次
.*:至少一次
?:0次或1次
+:最少一次
{n}:匹配前面的字符等于一次
位置锚定
^:行首锚定
$:行尾锚定
分组()
或者 |
-v:取反
-i:忽略字符大小
-n:匹配显示行号
-c:只显示行号
-o:仅显示匹配到的字符串
grep -A 3 dn /etc/passwd
取自己三行以及往下数三行
grep -B 3 dn /etc/passwd
自己三行以及往上数三行
-e:条件或
-w:匹配整个单词
-E:相当于egrep,使用扩展正则
-f:处理两个文件中的相同内容,第一个文件作为匹配条件
-r:所有包含文件内容(不处理软链接)
^:以……为开头
$:以……为结尾
sort:以行为单位对文本内容进行排序,也可根据数据类型来排序
-f:忽略大小写(默认情况下大写字母排在前面)
-b:忽略每行前面的空格
-n:按照数字进行排序(正向排序)
-r:按照数字进行排序(反向排序)
-u:去重
-o:将排序后的结果输出到指定文件夹
uniq(去重复)
cat 文件名 | uniq 选项
-c:统计连续重复行的次数,并合并重复行
-u:显示仅出现一次的行
-d:仅显示重复出现的行(连续出现)
tr:对来自标准输入的字符,进行替换、压缩、删除
-c:保留字符集1的字符,其他的字符用字符集2进行替换
-d:删除所有字符集1的字符
echo abc | tr -c "ab" "a"
-s:把重复出现字符串压缩为一个,用前一个替换后一个
cut:快速裁剪
cut 选项 参数 cat file | cut 选项
-d:指定分隔符
-f:按字段进行截取,跟上数字,截取第九段
-b:以字节为单位进行截取
-c:以字符为单位进行截取
-complement:排除所指定的字段
-output-delimiter:更改输出内容的分隔符
面试题:
split(大小文件拆分)
-l:按行拆分(指定行数)
-b:按大小拆分(指定大小)
paste:合并文件
paste cat
左右合并 上下合并
grep -m 1 root /etc/passwd
多个匹配只取第一个
grep -v '^[[:space:]]*#|^$' /etc/fstab
-i 忽略字符大小写 #可有可无
-n 显示匹配的行号
-c 统计匹配的行数
统计匹配到的行数
grep -c root /etc/passwd
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
grep -A 3 root /etc/passwd
匹配到的后三行也显示出来
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ’ -e ‘dog’ file
grep -e root -e bash /etc/passwd
包含root或者包含bash的行
-w:匹配整个单词
grep -w root /etc/passwd
-E 使用ERE,相当于egrep,使用扩展正则
-F 不支持正则表达式
-f file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接
grep -f 123.txt 456.txt 匹配两个文件内容相同部分
sort、uniq、tr命令
sort命令
以行为单位对文件内容进行排序,也可以根据不同数据类型排序
cat file | sort 选项
常用选项
-f:忽略大小写,默认大写字母排在前面
-b:忽略每行前面的空格
-n:按照数字进行排序
-r:反向排序
-u:等同uniq,表示相同的数据仅显示一行,去重
-t:指定字段分隔符,默认使用tab键
-k:指定排序字段
-o:将排序后结果转存至指定文件
sort -n test.txt
按数字大小进行排序
sort -n -r test.txt
倒序排列
sort -u test.txt
去重
快捷去重(uniq)
uniq [选项] 参数
cat 文件 | uniq 选项
-c 统计连续重复的行的次数,并且合并重复的行
-u 显示仅出现一次的行(包括不连续的重复行)
-d 仅显示重复出现的行(必须是连续的重复行)
tr命令(标准输入的字符进行替换、压缩、删除)
tr 选项 参数
-c:保留字符集1的字符,其他的字符用字符集2替换
-d:删除所有属于字符集1的字符
-s:将重复出现的字符串压缩为一个字符串,用字符串2换字符串1
变量扫描器---------eval
命令字前加上eval,shell会在执行命令之前扫描2次
#!/bin/bash
a=100
b=a
echo "普通echo输出的变量b的值为:"\$$b
eval echo "经过eval扫描输出变量b的值为:"\$$b