Shell三剑客

正则表达式


基本正则表达式元素符:
^: 行首定位符
$: 行尾定位符
.: 匹配单个字符
*: 匹配前导符0到多次
.*: 任意多个字符
[]: 百里挑一 匹配指定范围内的一个字符
[ - ]:匹配指定范围内的一个字符
[^]:匹配不在指定组内的字符
\:用来转义元字符
\<:词首定位符
\>:词尾定位符
():\(..\) 匹配稍后使用的字符的标签
x\{m\}:字符x重复出现m次
x\{m,\}:字符x重复出现m次以上
x\{m,n\}:字符x重复出现m到n次

扩展正则表达式元字符egrep:
+:匹配一个或多个前导字符
?:匹配零个或一个前导字符
a|b:匹配a或b
():组字符

grep


egrep (支持正则):
\w 所有字母与数字,称为字符[a-zA-Z0-9] 'l[a-zA-Z0-9]*ve' === 'l\w*ve'
\W 所有字母与数字之外的字符,称为非字符 'love[^a-zA-Z0-9]+' === 'love\W+'
\b 词边界 '\<love\>' === '\blove\b'

返回值: 0 是找到了 1 是没有 2 找到地儿不对
参数:
grep -q 静默
grep -i 忽略大小写
grep -v 去反
grep -R 可以查目录下面的文件
grep -o 只找到这个关键字就可以
grep -B2前两行
grep -A2后两行
grep -C2上下两行
egrep -l 只要文件名
egrep -n 带行号

-w 单词

sed


格式:
1. sed 选项 命令 文件 (建议)
2. sed 选项 –f 脚本 文件

返回值 : 都是0,对错不管。 只有当命令存在语法错误时,sed的退出状态才是非0
常用选项:
\B: 匹配非单词字符边界
-r正则
-n静默

g全局:
#sed -r 's/root/alice/g' passwd
i忽略大小写:
# sed -r 's/Root/aofa/gi' passwd
\c自定义分隔符:
sed -r '\crootcd' /etc/passwd
常用命令:
打印命令: p
# sed -r '/root/p' passwd
删除命令: d
# sed -r '3{d;}' passwd
替换命令: s
# sed -r 's/root/aofa/' passwd
读文件命令:r
# sed -r '$r 1.txt' passwd 最后一行,读取新文件1.txt
写文件命令:w
# sed -r 'w 111.txt' 1.txt 把1.txt全部内容 写入111.txt
追加命令: a
# sed -r '2a123' passwd 2行后面,加上123行
插入命令: i
# sed -r '2iaaaaaaaa' passwd 在第二行插入新行aaaaaaaaaa
替换整行命令: c
# sed -r '2caaaaaaaa' passwd 把第二行替换成aaaaaaaaa
获取下一行命令:n
# sed -r '/root/{n;d}' passwd n下一行的意思。找root行,然后下一行,删除
反向选择: !
# sed -r '2,$!d' passwd
多重编辑 : e
# sed -r -e '1,3d' -e '4s/adm/admin/g' passwd
暂存空间 hHGg

暂存和取用命令:h覆盖暂存空间 H追加暂存空间 g覆盖行 G追加行

awk


语法 awk [options] 'commands' filenames
==options: 例如:-F 定义输入字段分隔符,默认的分隔符是空格或制表符(tab)
==command时空:
BEGIN{} begin发生在行处理前(注意大写)
{} 行处理时,读一行执行一次
END{} 行处理后

记录与字段相关内部变量:
$0: awk变量$0保存当前记录(行)的内容
FS: 输入字段分隔符(默认空格)
OFS: 输出字段分隔符
RS: 输入记录(行)分隔符,默认换行符
ORS: 输出记录(行)分隔符,默认换行符
FNR: 多文件独立编号
NR: 多文件汇总编号
NF: 显示字段总数

比较表达式:
关系运算符:
运算符 含义 示例
< 小于 x<y
<= 小于或等于 x<=y
== 等于 x==y
!= 不等于 x!=y
>= 大于等于 x>=y
> 大于 x>y
条件表达式:
语法: awk -F: '{ if() {} }' /etc/passwd
# awk -F: '{ if($3>5) print $0 }' /etc/passwd

猜你喜欢

转载自blog.csdn.net/qq_30429153/article/details/85242953