命令行下的特殊符号
* 通配符 | 管道符
& 前台进程放置后台
命令连接符号
&& 前面命令执行成功则执行后面命令,前面失败后面不执行
|| 前面命令执行成功则不执行后面命令,前面失败执行后面命令
; 执行命令的结束符,并列命令一起执行
引号的区别
'' 吃啥吐啥,变成字符串,不解析特殊符号
"" 解析特殊符号的功能 ,将多个字符串作为整体
`` 优先执行
$() 与``功能一样
\ 反斜线,不解析特殊符号
三剑客
grep:擅长字符串过滤
sed:擅长行级字符串过滤
awk:擅长列级操作
grep
grep '需要过滤的字符串' 文件 快速查找文件中指定字符串,显示字符串所在行
-v 取反 不显示指定字符串所在行(invert-match)
-i 不区分大小写(ignore-case)
-w 按照字符串过滤 字符串作为整体,独立的字符串(word-regexp)
-n 显示行号 在源文件的第几行(number)
grep 'test' * 当前所有文件哪些包含test
-r 查看当前文件和目录里的文件是否包含字符串,递归查询(recursive)
-l 只显示包含此字符的文件名,不显示搜索的字符串所在行,用来排除干扰字符串(file-with-matches)
-A n #after过滤文件内容后,显示包含所过滤的行及后面的n行
-B n #before过滤文件内容后,显示包含所过滤的行及前面的n行
-C n #center过滤文件内容后,显示包含所过滤的行及前后各n行
-q 静默模式, 不显示任何信息(quiet)
sed
命令
sed '过滤条件 动作' 文件
过滤条件 数字代表处理第几行
动作
-i处理后的文本覆盖源文件(insert)
动作
p 输出print,输出原始数据和处理后的数据,默认都会输出,加参数-n只输出处理后的数据
d 删除delete
a 符号条件的行的下一行插入一行新内容,追加append
c 替换
输出
sed -n "$p" /etc/passwd 输出/etc/passwd最后一行
sed -ne "50p" -e "55P" /etc/passwd 输出50行,55行
sed -n "40,50p" /etc/passwd 输出40-50行
sed -n "1~2p" /etc/passwd 输出奇数行,1从哪开始,~间隔,间隔2,每隔两行输出
删除
sed "50d" /etc/passwd 删除50行
sed "90a dms" /etc/passwd 第九十行的下一行插入一行dms
sed "100c dms" /etc/passwd 第一百行替换为dms
sed '/Lane/d' test1.txt 删除包含Lane的含
查找字符串
sed -n '/过滤的字符串/p' /etc/passwd
sed -n '/\/sbin\/nologin/p' /etc/passwd
批量替换
sed 's/被替换的字符/用什么替换/g' 文本
sed 's/:/ /g' /etc/passwd | column -t #column -t格式化输出
sed '1,3s/^/#/' /tmp/grub.conf 首行添加#
sed '1,3s/^./#/' /tmp/grub.conf 首行的第一个字母替换成#
awk
awk '条件判断{print 列1,列2}' 文件
-F 指定列分割符
输出
awk -F ':' '{print $1}' /etc/passwd 分割指定输出第几列
awk -F ':' '{print $1 $3}' /etc/passwd 输出多列
awk -F ':' '{print $1"用什么分割他们显示"$3}' /etc/passwd 输出多列,指定字符分割显示
awk -F ':' '{print $1 $NF}' /etc/passwd $NF最后一列
条件判断
awk -F ':' '$5>1000{print $5 $3}' /etc/passwd 条件判断,第五列大于1000的
IP a |awk 'NR==2 {print $3}' 判断是否等于第二行
awk -F ':' '/\/sbin\/nologin/{print $1" "$NF}' /etc/passwd 判断是否包含/sbin/nologin
正则表达式
作用
结合三剑客,更精确的匹配分析文本内容
分类
普通正则
直接使用
grep '.' 每次匹配一个字符
-o显示匹配过程
. 匹配任意单个字符,每个字符都是
* 匹配和前面相邻字符连续出现0次或多次,a*,寻找a出现0次或多次
.* 匹配所有内容,每个字符出现0次或多次
^ ^a匹配以^后面的字符串开头的,匹配每行以谁开头
$ a$匹配每行以a结尾
^$ 空行,以空开头,以空结尾
[] [abc]分别以a,b,c去过滤一遍,里面的字符分别被匹配一次
[^abc] 取反,不匹配a,b,c
扩展正则
- grep -E 支持扩展正则(E expression)
- egrep 支持扩展正则
- sed -r 支持扩展正则
- awk 支持扩展正则
+ 匹配前面字符出现一次或多次
? 匹配前面字符出现0次或1次
{n} 匹配前面字符出现n次
{m,n} 匹配前面字符连续出现最少m次,最多n次
'{3,5}'
| 或者
grep -Ev "^#|^$" /etc/ssh/sshd_config 过滤注释和空行
() 括住的内容作为整体 '(abc){3}'