Bash官方文档:https://www.gnu.org/software/bash/manual/bash.html
正则表达式 https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
shell 运行环境
bash下还可以再重新启动⼀个shell,这个shell是sub shell,原shell会复 制⾃⾝给他。在sub shell中定义的变量,会随着sub shell的消亡⽽消失
() 子shell中运行
$(ls) 表示执行ls后的结果,与``作用一致,不过可以嵌套
{}当前shell中执行
$$当前脚本执行的pid
&后台执行
$!运行在后台最后一个作业的pid(进程ID)
shell Piping 管道
❖ Read ⽤来读取输⼊,并赋值给变量
❖ echo ,printf可以简单输出变量。
❖ > file 将输出重定向到另⼀个⽂件
❖ >> 表⽰追加 等价于tee -a
❖ < file 输⼊重定向
| 表⽰管道,也就是前⼀个命令的输出传⼊下⼀个命令 的输入
Linux 三剑客
grep(数据查找定位)
awk(数据切片)
sed(数据修改)
类⽐SQL
grep=select * from table
awk=select field from table
sed=update table set field=new where field=old
grep
- 常用 -i -v -o -E -oE
grep pattern file
grep -i pattern file 忽略大小写
grep -o pattern file 精准匹配
grep -v pattern file 反转查找,输出与查找条件不匹配的行
grep -E pattern file 扩展正则表达式
grep -A -B -C pattern file 显示命中数据的上下文
grep pattern file -r dir / 递归搜索
一般使用 -oE 来模糊搜索
- 实例
echo 'hello test!' | grep -o 'e'
不加-o会把包含匹配信息所在行中的所有内容输出(不在一行的不会输出)
正则表达式
- 基本表达式
^开头
$结尾
[a-z][0-9]区间
.匹配任意一个字符
*0个或多个 能匹配多少匹配多少
.* 加在一起就是:匹配任意多个字符
echo 1234 | grep -E "^.*?" 输出 1234
- 基本正则与扩展正则的区别
? 非贪婪模式 ,尽量少的匹配
+ ⼀个或者多个
() 分组
{} 范围约束
| 匹配多个表达式的任何⼀个
echo 1234 | grep -oE ".*?" 输出 为空
echo 1234 | grep -oE '..*?' 输出 1
2
3
4
解读: .*?什么也没有 再加个. 全部匹配
echo "hello,nihao ,hi" | grep -E "(hello)|(hi)" //该括号不加也行
- curl命令:
curl 网址 | grep 正则
curl -s https://www.baidu.com/ | grep 正则
-s :加上表示会屏蔽curl的一些调试信息,一般都加