- 正则介绍
- 正则就是一串有规律的字符串。
- 掌握好正则对于便携shell脚本有很大帮助。
- 各种编程语言中都有正则,原理是一样的。
- grep工具 [-cinvABC]'word'filename
- -c 行数。
- -i 不区分大小写。
- -n 显示行号。
- -v 取反。
- -r 遍历所有子目录。
- -A 后面跟数字,过滤出符合要求的行以及下面n行。
- -B 同上,过滤出符号要求的行以及上面n行。
- -C 同上,同时过滤出符和要求的行以及上下各n行。
- grep/egrep示例(egrep就是grep的拓展)
- grep -n ‘root’ /etc/passwd
- grep -nv ‘nologin’ /etc/passwd
- grep ‘[0-9]’ /etc/inittab
- grep -v ‘[0-9]’ /etc/inittab
- grep -v ‘^#’ /etc/inittab
- grep -v ‘^#’ /etc/inittab|grep -v ‘^$’
- grep ‘^[^a-zA-Z]’ test.txt(^表示在括号外为以什么为开头,在括号内以非什么为开头)
- grep ‘r.o’ test.txt(.表示为任意字符)
- grep ‘oo*’ test.txt(*表示为左边字符重复0-n次)
- grep ‘.*’ test.txt
- grep ‘o{2}’ /etc/passwd({}表示为前面字符的重复范围)
- egrep ‘o{2}’ /etc/passwd
- egrep ‘o+’ /etc/passwd(+表示为左边字符的1-n次)
- egrep ‘oo?’ /etc/passwd(?表示为问号前面字符的0-1次)
- egrep ‘root|nologin’ /etc/passwd(|表示为或者)
- egrep ‘(oo){2}’ /etc/passwd(()表示为组合)
- 简单审计系统 http://www.68idc.cn/help/server/linux/2014042190951.html
- sed工具
- sed工具与grep工具使用方法基本相同但更麻烦一些,不过也有自己的特点。Sed工具能很好的起到一个替换的作用。
- p 打印。
- d 删除(会显示为还剩余的行数和内容)。
- g 替换。
- -n 行数。
- -I 区分大小写。
- -i 彻底删除。
- sed ‘1’d test.txt
- sed ‘1,3’d test.txt
- sed ‘/oot/’d test.txt
- sed ‘1,2s/ot/to/g’ test.txt
- sed ‘s#ot#g’ test.txt
- sed ‘s/[0-9]//g’ test.txt
- sed ‘s/[a-zA-Z]//g’ test.txt
- sed -r ‘s/(rot)(.*)(bash)/\3\2\1/’ test.txt
- sed ‘s/^.*$/123&/’ test.txt
- sed -i ‘s/ot/to/g’ test.txt
- sed -n ‘5’p test.txt
- sed -n ‘1,5’p test.txt
- sed -n ‘1,$’p test.txt
- sed -n ‘/root/’p test.txt
- sed -n ‘/^1/’p test.txt
- sed -n ‘in$’p test.txt
- sed -n ‘/r..o/’p test.txt
- sed -n ‘oo*’p test.txt
- sed -e ‘1’p -e ‘/111/’p -n test.txt
- Sed ‘1’d test.txt
- Sed ‘1,3’d test.txt
- Sed ‘/oot/’d test.txt
- Sed ‘1,2s/ot/to/g’ test.txt
- Sed ‘s#ot#to#g’ test.txt
- Sed ‘s/[0-9]//g’ test.txt
- Sed ‘s[a-zA-Z]’g test.txt
- Sed -r ‘s/(rot)(.*)(bash)/\3\2\1/’ test.txt
- Sed ‘s/^.*$/123&/’ test.txt
- Sed -i ‘s/ot/to/g’ test.txt
- awk工具
- awk相较于sed多出的一个功能就是分段。
- -F 指定分割符。
- “” 表达为是否针对于数字(加””为针对于字符串,不加””为针对于数字)。
- head -n2 test.txt|awk -F ‘:’ ‘{print $1}’(以:为分割打印第一列)
- head -n2 test.txt|awk -F ‘:’ ‘{print $0}’(以:为分割打印所有列)
- awk -F ‘:’ ‘{print $1”#”$2”#”$3”#”$4}’(以:为分割打印第一、第二、第三、第四列)
- awk ‘/oo/’ test.txt
- awk -F ‘:’ ‘$1 ~ /oo/’ test.txt(以:为分割打印有oo的第一段)
- awk -F ‘:’ ‘/root/ {print $1,$3} /test/ {print$1,$3}’ test.txt
- awk -F ‘:’ ‘$3==”0”’ /etc/passwd
- awk -F ‘:’ ‘$3>=”500”’ /etc/passwd
- awk -F ‘:’ ‘$3>=500’ /etc/passwd
- awk -F ‘:’ ‘$7!=”/sbin/nologin”’ /etc/passwd
- awk -F ‘:’ ‘$3<$4’ /etc/passwd
- awk -F ‘:’ ‘$3>”5” && $3<”7”’ /etc/passwd
- awk -F ‘:’ “$3>1000 || $7==”/bin/bash”’ /etc/passwd
- head -5 /etc/passwd |awk -F ‘:’ ‘{OFS=”#”}{print $1,$3,$4}’(将分割符:定义成#)
- awk -F ‘:’ ‘{OFS=”#”}{if ($3>1000){print $1,$2,$3,$4}}’ /etc/passwd
- head -n3 /etc/passwd |awk -F ‘:’ ‘{print NF}’(NF为显示段数)
- head -n3 /etc/passwd |awk -F ‘:’ ‘{print NR}’
- awk ‘NR>40’ /etc/passwd
- awk -F ‘:’ ‘NR<=0 && $1 ~ /roo/’ /etc/passwd(NR为显示行数)
- head -n 3 /etc/passwd |awk -F ‘:’ ‘$1=”root”’
- awk -F ‘:’ ‘{(tot=tot+$3)}; END {print tot}’ /etc/passwd(到第三段的所有的和)
- awk -F ‘:’ ‘{if($1==”root”){print $0}}’ /etc/passwd
- 拓展
- awk语法结构
- awk -F ‘:’ ‘BEGIN{语句} {if(条件){语句1;语句2;语句3}}END{语句}’ filename
- 打印某行到某行之间的内容
- Sed -n ‘/tss/,/sas/p’ /etc/passwd
- Sed转换大小写
- 1.把每个达成的第一个小写字母变大写
- Sed ‘s/\b[a-z]/\u&/g’ filename
- 2.把所有小写变大写
- Sed ‘s/[a-z]/\u&/g’ filename
- 3.大写变小写
- Sed ‘s/[A-Z]/\l&/g’ filename
- Sed在某一行最后面添加一个数字
- Sed ‘s/(^a.*)/\1 12/’ test
- Sed ‘-r ‘s/(^a.*)/& 12/’ test
- 打印1到100行含某个字符串的行
- Sed -n ‘1,100(/abc/p)’ 1.txt
- Awk中使用外部shell变量
- A=2;echo“a:b:c:d”|awk -F “:” -v get_a=$a’{print $get_a}’
- Awk合并一个文件
- Awk ‘NR==FNR{a[$1]=$2} NR>FNR {print $0,a[$1]}’ 1.txt 2.txt
- 说明
- Awk ‘{print NR,FNR}’ 1.txt 1.txt (首先理解NR和FNR的不同(awk支持同时操作多个文件内容))
- 当NR==FNR其实就是第一个文件的内容
- 当NR>FNR,其实就是第二个文件的内容
- 把一个文件多行连接成一行
- 方法一:awk ‘cat file’;echo $a|
- 方法二:awk ‘{printf(“%s”,$0)}’ file
- 方法三:cat file |xarge(相对简单快捷)
- Awk中gsub行数的使用
- Awk ‘gsub(/www/,”abc”)’ /etc/passwd(passwd文件中把所有www替换成abc)
- Awk -F ‘:” ‘gsub(/www/,”abc”,$1){print $0}’ /etc/passwd(替换¥1中的www为abc)
- 过滤两个或多个关键词
- Grep -E ‘123|abc’ filename(找出文件(filename)中包含123或abc的行)
- Egrep ‘123|abc’ filename(用egrep同样可以实现)
- Awk ‘/123|abc/’ filename(awk的实现方式)
- Awk用print打印单引号
- Awk ‘BEGIN{print ”a’ ” ’ ” ’s”}’
- Awk ‘BENGIN{print ”a’\”s”}’
- Awk ‘BENGIN{print “a\”s”}’
转载于:https://my.oschina.net/u/4095969/blog/3034405