课程补充
&,&& ,|,||的差距
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
正则:
grep
egrep是grep的扩展,grep有的功能egrep都有
-n显示行数
在centos7里grep自动带有颜色区分,6是没有颜色的
ifconfig |grep -A1 "ens33" |tail -l |awk -F' ' '{print $1 $2 $3}'
‘‘中间不写代表用空格分割,
利用这个可以过滤出需要的ip地址
过滤ip
将a=ens33
ifconfig |grep -A1 $a |tail -l |awk -F ' ' '{print $2}' $a上则可以使用对应的了
过滤
加-v
-v取反(过滤出不带关键词的行),例如带有nologin,那么不现实带有nologin的行
Grep -in
grep –rn -r级联
-A表示过滤第几行
-A 2
-C 上下
grep -nC 2 '11111' 1.txt 加上n参数比较合适
去除#和空行的
先过滤#
过滤空行 “^$”
因为里面到了 egrep=grep –vE,这可以过滤到#号和空行的文件
或者以字母开头
grep -n "^[a-zA-Z]" 1.txt
非字母开头
grep -n "^[^a-zA-Z]" 1.txt
取反
grep -nv "^[^a-zA-Z]" 1.txt
加了-v是不要空行和注释
用到转义字符的
至少两个oo关系
(00){2,3} 两次或者3次
过滤对应的,满足其一就行
grep ‘[0-9]’ 文件名
[ ]表示含有至少其中一个字符
grep –v除去对应的带有数字的行
grep -v '[0-9]' 1.txt
-rn 过滤含有数字的行并且显示行数
egep -v "^#” 过滤掉#开始的符号的行
^$" /etc/config wc –l
grep -rn ""
grep -n -v "[^a-zA-Z]" /etc/passwd是非字母取反,空行
grep -n "^[^a-zA-Z]" /etc/passwd是非字母行 不包含空行
sed
sed和grep相比,sed也能实现grep的功能,但是有点麻烦,而且没有用颜色显示,强项在于替换
Sed –n 例如打印第二行
找对应的字符
至少一次rt
sed -n '/r\+t/'p 1.txt 代表至少过滤出来一个rt,+号代表1以上
这里注意
? 0次或1次
* 0次无穷次
+ 1次无穷次
打印从12行开始
sed -n '12,$'p 1.txt
Sed –i 删除12-16行
替换
sed -i '1,10s/root/toor/' 1.txt |head
例如sed -r 's/([^:]+):(.*):([^:]+)/\3:\:2\1/' 1.txt
:(.*): :......: 冒号开头当中不管什么字符但是必须冒号结尾 第2段
[^:]: .....: :开头 :结尾
[^:]+: 不能冒号开头,文件里面只能数字开头
[^] 匹配非方括号里面的内容。就是:只要不是方括号里面的内容都打印出来。
^[^] 匹配非方括号里面的内容开头的所有字符。 只要不是方括号里面的内容所开头的,都打印出来。