您的位置:首页 > 其它

11-12 课堂笔记

2018-11-14 14:05 176 查看
  1. grep

过滤文本文档的工具

  • 选项-c/-i/-n/-r/-An1/-Bn1/-Cn1/-v

  • ^表示以...开头,如过^放入[]中则表示取反

  • 单引号和双引号

如果grep想要过滤变量的值,那么就一定要加双引号而不是单引号

如下例子,我们把a赋值等于root(之前已经把/ect/passwd的内容拷贝到了/tmp/grep/text.txt中),想要过滤出有root的行可以用一下两种办法

# grep 'root' /tmp/grep/text.txt

# grep "$a" /tmp/grep/text.txt

 

  • grep过滤出的结果带颜色是因为grep别名有--color

  • 正则表达是就是一串含有特殊字符的字符串,作为某些工具如grep,set,awk的一部分使用

例如[0-9]所有的数字, ^[^0-9]以非数字开头,

grep 'r.o' test.txt, .号表示任意字符,这个例子表示过滤出匹配r任意字符o的内容

 

grep 'oo*' test.txt, *号表示匹配重复其左边字符0-n次

 

grep '.*' test.txt, 匹配所有字符(任意字符)

 

grep 'o\{2\}' test.txt, {}在grep中的使用表示{}前面字符的重复范围,且使用时需要用\符号来脱译,因此这个例子匹配的是出现两次o

{}号中可以添加次数范围,写成\{0,3\}表示0到3都匹配

egrep 'o{2}' test.txt的作用和grep 'o\{2\}' test.txt相同

grep -E和egrep是一个意思使用于扩展正则(+、?,{},(),|),grep -E 'o{2}' test.txt的结果也是一样的

grep -E '(oo){2}' test.txt,把{}前面的字符()起来表示一个整体,例子就是匹配oo出现两次

 

grep '0\+' test.txt & egrep '0+' test.txt, +表示匹配其左边字符的1次或多次

 

grep -E/ egrep 'oo?' test.txt, ?表示匹配重复其前面字符的0次或1次

 

egrep 'root|nologin' /etc/passwd, |表示或者

 

  1. sed

可以实现grep的功能,但是核心功能为替换

  • 如果要过滤有关键字的行,要把关键字加//括起来,如sed -n '/root/'p test.txt

  • 过滤指定的行,#sed -n '行数'p filename

  • 如要要忽略大小写,则为# sed -n '/关键字/'Ip filename

  • sed 'n1,n2'd filename,只是不在屏幕显示,并没有删除文件内容,如果想要删除加-i选项写成sed -i 'n1,n2'd filename

  • 最后一段和第一段替换位置

sed -r 's/([^:]+):(.*):[^:+]/\3:\2:1/' test.txt

 

  • sed 可以用来删除字符,其实也是替换空的字符

例如 sed 's/[a-zA-Z]//g' filename

在shell脚本中经常使用,shell脚本需要自动输入全英文的字符串,如何去判断如下

给变量a赋值a=asdfjslkdjf

$a 为asdfjslkdjf

shell可以用b=`echo $a |sed 's/[a-zA-Z]//g'`, 如果echo $b为空,则a变量为纯英文字母

可以用if [-z "$b" ]; then echo "b is null"; fi,来判断变量b是否为空

  • sed也可以用来给文档前面同意添加字符串

sed -r 's/(.*)/要添加的字符串:&/' filename, (.*)表示整行, &表示前面的(.*)

 

  1. awk

  • {print $0}表示打印一整行

  • awk '/关键字/' filename, //可以去掉

  • $n1 ~ /关键字/, ~为匹配

  • 在比较大小的时候,想要比较的数字不要加"", 如果加双引号则被会认为是普通的字符串

  • awk 'BEGIN{ commands } {if (条件)(条件)(条件) } END{ commands }' file

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: