Linux-三剑客
grep
文本搜索
grep [option] pattern files
-c: 只输出匹配行数
-i: 不区分大小写
-l:查询多文件时只输出包含匹配字符的文件名
-n: 显示行号
-s: 不显示不存在或无匹配文本的错误信息
-v: 反向搜索
-o: 只显示匹配的部分
-B<num>:同时显示匹配行前num行
-A<num>:同时显示匹配行后num行
-<num>: 同时显示匹配行的上下num行
-C<num>: 同时显示匹配行的上下num行
-w: 精确匹配,abc 只能匹配abc ,不能匹配abcd
-e: 同时匹配多个,-e pattern1 -e pattern2,任意一个pattern匹配成功就输出
-q: 不显示匹配到的内容,只关心是否匹配成功,$?为0表示匹配成功,1表示失败
-E: 使用扩展正则表达式,
-P:使用perl兼容的正则表达式
egrep:相当于grep -E
fgrep:不支持正则,速度快
三种正则比较
awk
文本处理,一行一行的读取,处理
awk 'BEGIN {command} pattern {commands} END{command}' file
BEGIN: 数据处理前执行的命令
END: 处理数据后执行的命令
pattern: 模式,每一行都执行的命令
BEGIN和END里的命令都只执行一次, pattern里的命令每一行执行一次
-F :指定文本分隔符,默认空格。
-v var=xx 声明一个变量可以在 ' '中使用,如果直接使用外部变量无法在' '内部使用
cols=$(head -1 file.txt | wc -w)
for i in $(seq 1 $cols); do
awk -v c=$i '{print $c}' file.txt | xargs
done
# awk中的预定义变量
$0代表整行,$1-n,代表分隔后的第1到n个字段
NF: 字段数
NR: 行号
FS: 文本内容分隔符,优先级高于-F
OFS: 输出分隔符,默认空格
# awk中的函数
print : 打印
printf: 格式化打印
%s: 字符串
%d: 数字
-:左对齐
+: 右对齐
15: 至少占用15个字符
比较表达式
匹配文本之内的内容
>, <, >=, <=
~: 正则匹配,
!~: 正则匹配不包含
awk -F: '$4>$3 {print $0}' /etc/passwd
awk 'BEGIN{FS=":"} $NF ~ /bash/ {print $0}' /etc/passwd
条件表达式:文本之外的内容
==, >, <, >=, <=
&& || !
awk -F: 'NR==3{print $0}' /etc/passwd
算术表达式
+, -, * , /, %
awk '$3+$4>2000{print $0}' /etc/passwd
流程控制
if:
if(){}
if(){}else{}
if(){}else if{}else{}
for:
for(i=1;i<10;i++){}
while:
while(condition){}
awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd
sed
文本编辑
sed [选项] [动作] [inputfile]
# 选项
-n: 只输出经过处理的行,默认情况下所有行都会输出
-i: 修改文件内容而不是输出到终端
-f: 把动作写到文件中
# 动作
a: 添加行,3a在第三行后面添加一行
i: 插入行,3i在第三行插入
c:取代行, 3c取代第三行
p: 列印,与-n连用只输出匹配的行
s: 替换, s/old/new/