最近在看shell,这些又丢了,赶紧回来重新复习复习。
一、grep/egrep 1. 语法+选项 语法: grep[-cinvABC]'word'filename -c :打印符合要求的行数 -n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),例如 ?A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 ?B2 则表示打印符合要求的行以及上面两行 -C :后跟一个数字,例如 ?C2 则表示打印符合要求的行以及上下各两行 -r : 会把目录下面所有的文件全部遍历
2. 例子介绍 过滤出带有某个关键词的行并输出行号 grep -n 'root' 1.txt 过滤出不带有某个关键词的行并输出行号grep -n -v 'root' 1.txt 过滤出所有包含数字的行 grep '[0-9]' 1.txt 过滤出所有不包含数字的行 grep -v '[0-9]' 1.txt 去除所有以'#'开头的行 grep -v '^#' 1.txt 去除所有空行和以'#'开头的行 grep -v '^$' 1.txt|grep -v '^#' 过滤出以英文字母开头的行 grep '^[a-zA-Z]' 1.txt 过滤出以非数字开头的行 grep '^[^0-9]' 1.txt 过滤任意一个或多个字符 grep 'r.o' 1.txt; grep 'r*t' 1.txt; grep 'r.*t' 1.txt . 表示任意一个字符;*表示零个或多个前面的字符 ;.*表示零个或多个任意字符,空行也包含在内 指定过滤字符次数 grep 'o{2}' 1.txt
3. egrep egrep工具 是grep工具的扩展 egrep 'o+' 1.txt 表示1个或1个以上前面字符 egrep 'o?' 1.txt表示0个或者1个前面字符 egrep 'roo|body' 1.txt匹配roo或者匹配body egrep 'r(oo)|(at)o' 1.txt 用括号表示一个整体 egrep '(oo)+' 1.txt 表示1个或者多个 'oo'
4. . * + ? 总结 . 表示任意一个字符(包括特殊字符) * 表示零个或多个*前面的字符 .* 表示任意个任意字符(包含空行) + 表示1个或多个+前面的字符 ? 表示0个或1个?前面的字符 其中,+ ? grep不支持,egrep才支持。
二.sed
打印指定行 sed '10'p -n 1.txt; sed '1,4'p -n 1.txt; sed '5,$'p -n 1.txt 打印包含某个字符串的行 sed -n '/root/'p 1.txt 可以使用 ^ . * $等特殊符号 -e 可以实现同时进行多个任务 sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;实现sed'/root/p; /body/p' -n 1.txt 删除行 sed '/root/d' 1.txt; sed '1d' 1.txt; sed '1,10d' 1.txt 替换 sed '1,2s/ot/to/g' 1.txt,其中s就是替换的意思,g为全局替换,否则只替换第一次的,/也可以为 #,@ 等 删除所有数字 sed 's/[0-9]//g' 1.txt 删除所有非数字sed 's/[^0-9]//g' 1.txt 调换两个字符串位置 head -n2 1.txt |sed 's/(root)(.*)(bash)/321/' 直接修改文件内容 sed -i 's/ot/to/g' 1.txt
三.awk
截取文档中的某段
awk -F ':' '{print $1}' 1.txt
-F 指定分隔符号为 :
也可以会用自定义字符连接每个段
awk -F ':' '{print $1"#"$2"#$3}' 1.txt
或者使用awk内部变量OFS
awk -F ':' '{OFS="#"} {print $1,$2,$3}' 1.txt
匹配字符或者字符串
awk '/oo/' 1.txt
针对每个段匹配
awk -F ':' '$1 ~/oo/' 1.txt
多次匹配
awk -F ':' '/root/ {print $1,$3}; $1 ~/test/;$3 ~/20/' 1.txt
条件操作符号
第三段为0
awk -F ':' '$3=="0"' 1.txt
第三段大于等于500
awwk -F ':' '$#>=500' 1.txt
.......
awk内置变量 NF(段数) NR(行数)
head -n3 1.txt | awk -F ':' '{print NF}'
head -n3 1.txt | awk -F ':' '{print $NF}'
head -n3 1.txt | awk ':' '{print NR}'
打印20行以后的行
awk 'NR>20' 1.txt
打印20行以后并且第一段包含'ssh'的行
awk -F 'NR>20&&$1 ~/ssh/'
更改某个段的值
awk -F ':' '$1="root"' 1.txt
数学计算,把第三段和第四段值相加,并赋予第七段
awk -F ':' '{$7=$3+$4; print $0}' 1.txt
计算第三段的总和
awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也可以使用if关键词
awk -F ':' '{if ($1=="root") print $0}' 1.txt (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|