Shell 输入输出
Read 用来读取输入,并赋值给变量
echo ,printf可以简单输出变量。
> file 将输出重定向到另一个文件
>> 表示追加等价于tee -a
< file 输入重定向
| 表示管道,也就是前一个命令的输出传入下一个命令的输入
文件描述符
输入文件—标准输入0
输出文件—标准输出1
错误输出文件—标准错误2
使用 2>&1 >/tmp/tmp < /tmp/tmp
管道
把不同程序的输入和输出连接
可以连接更多命令
常见的组合命令Linux三剑客
echo hello world | read x; echo $x
echo hello world | while read x;do echo $x;done
grep
基于正则表达式查找满足条件的行
数据查找定位
grep pattern file
grep -i pattern file 忽略大小写
grep -v pattern file 不显示匹配的行
grep -o pattern file 把每个匹配的内容用独立的行显示
grep -E pattern file 使用扩展正则表达式
grep -A-B -C pattern file 打印命中数据的上下文
grep pattern -r dir/ 递归搜索
pattern正则表达式
基本表达式(BRE)
^ 开头 $结尾
[a-z] [0-9] 区间
* 0个或多个
基本正则(BRE)与扩展正则的区别(ERE)
? ?贪婪匹配
+ ?个或者多个
() 分组
{} 范围约束
| 匹配多个表达式的任何一个
curl https://testerhome.com | grep -o 'http://[a-zA-Z0-9\\.\\-]*'
awk
根据定位到的数据行处理其中的分段
awk 'pattern{action}'
awk 'BEGIN{}END{}' 开始和结束
awk '/Running/' 正则匹配
awk '/aa/,/bb/' 区间选择
awk '$2~/xxx/' 字段匹配
awk 'NR==2' 取第二行
awk 'NR>1' 去掉第一行
awk内置变量
FS 字段分隔符
OFS 输出数据的字段分隔符
RS 记录分隔符
ORS 输出字段的行分隔符
NF 字段数
NR 记录数
awk的字段数据处理
-F 参数指定字段分隔符
BEGIN{FS="_"} 也可以表示分隔符
$0代表当前的记录
$1代表第一个字段
$N 代表第N个字段
$NF 代表最后一个字段
把单行分拆为多行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
多行组合为单行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk
'BEGIN{FS="\\n";ORS=":"}{print $0}'
sed
sed [addr]X[options]
-e 表达式
sed -n '2p' 打印第二行
sed 's#hello#world#' 修改
-i 直接修改源?件
-E 扩展表达式
--debug 调试
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed 's#/
#----#g'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed -n '/
^\\/bin/,/sbin/p'
sed -i '.bak' -e '' -e ''
閱讀更多 溫焱 的文章