文本搜索
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 'BEGIN {command} pattern {commands} END{command}' file BEGIN: 数据处理前执行的命令 END: 处理数据后执行的命令 pattern: 模式,每一行都执行的命令 BEGIN和END里的命令都只执行一次, pattern里的命令每一行执行一次
-F :指定文本分隔符,默认空格。 # 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 [选项] [动作] [inputfile] # 选项 -n: 只输出经过处理的行,默认情况下所有行都会输出 -i: 修改文件内容而不是输出到终端 -f: 把动作写到文件中 # 动作 a: 添加行,3a在第三行后面添加一行 i: 插入行,3i在第三行插入 c:取代行, 3c取代第三行 p: 列印,与-n连用只输出匹配的行 s: 替换, s/old/new/