Cirry's Blog

Shell编程——正则表达式&&条件判断与流程控制(15)

2016-08-08
linux
6分钟
1006字

Sed命令:主要用来将数据进行选取, 替换, 删除, 新增的命令

echo $(ls)

sed [选项] ‘[动作]’ 文件名

选项:

  • -n:一般sed命令会把所有数据都输出到屏幕上, 如果加入此选项,则只会把经过sed命令处理的行输出到屏幕
  • -e:允许对输入数据应用多余sed命令编辑
  • -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:

  • -a:追加
  • -c:行替换
  • -i:插入
  • -d:删除
  • -p:打印
  • -s:字串替换 “行范围s/旧字串/新字串/g”

行数据操作:

sed ‘zp’ student.txt

#查看文件的第二行

sed -n ‘zp’ student.txt

sed ‘2,4d’ student.txt

#删除第二行到第四行的数据,但不修改文件本身

sed ‘za piaoliang jiushi renxing’ student.txt

#在第二行后追加

sed ‘2i meinv’ student.txt

#在第二行后插入两行数据

sed ‘2c furong bujige’ student.txt

字符串替换:

#sed ‘s/旧字串/新字串/g’ 文件名

sed ‘3s/60/90/g’ student.txt

#在第三行中把60换成90

sed -i ‘3s/60/90/g’ student.txt

#sed操作的数据直接写入文件

sed -e ‘s/fengjie//g; s/cangls//g’ student.txt

#同时把fengjie和cangls替换为空

字符处理命令

1.sort 命令:排序

sort[选项] 文件名

选项:

  • -f:忽略大小写
  • -n:以数值型进行排序,默认使用字符串排序
  • -r:反向排序
  • -t:指定分隔符,默认是分割符是制表符
  • -k n[,m]:按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行)

sort /etc/passwd/

#按照字母顺序排

sort -r /etc/passwd

#取反

sort -t ”:” -k 3,3 /etc/passwd

#指定分隔符是”:“,用第三字段开头,第三字段结尾排序,就只用第三字段排序

sort -n -t ”:” -k 3,3 /etc/passwd

2.统计命令 wc

wc[选项] 文件名

选项:

  • -l:只统计行数
  • -w:只统计单词数
  • -m:只统计字符数
1
wc /etc/passwd
2
wc -l /etc/passwd

Shell条件判断与流程控制——条件判断式语句

  1. 按照文件类型判断:
  • -b 文件:存在? 块设备文件?
  • -c 文件:存在?字符设备文件?
  • -d 文件:存在?为目录?
  • -e 文件:存在?
  • -f 文件:存在?为普通文件?
  • -L 文件:存在?为符号链接文件?
  • -P 文件:存在?为管道文件?
  • -s 文件:存在?为非空?
  • -S 文件:存在?为套接文件?

两种判断格式

test -e /root/install.log

[-e /root/install.log]

[-d /root] && echo “yes” || echo “no”

第一个判断命令如果正确执行,则打印“yes”,否则打印“no”

  1. 按照文件权限进行判断
  • -r 文件:存在?rw?
  • -w 文件:存在?w?
  • -x 文件:存在?x?
  • -u 文件:存在?SUID?
  • -g 文件:存在?SGID?
  • -k 文件:存在?SBIT?

[-w student.txt] && echo “yes” || echo “no”

判断文件是否拥有写权限

  1. 两个文件之间进行比较:
  • 文件1 -nt 文件2:判断文件1的修改时间是否比2新?
  • 文件1 -ot 文件2:判断文件1的修改时间是否比2旧?
  • 文件1 -ef 文件2:判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件,判断硬链接

In /root/student.txt /tmp/stu.txt

#创建个硬链接

[/root/student.txt -ef /tmp/stu.txt] && echo “yes” || echo “no”

用test测试

  1. 两个整数之间的比较:
  • 整数1 -eq 整数2:=?
  • 整数1 -ne 整数2:不=?
  • 整数1 -gt 整数2:1>2?
  • 整数1 -lt 整数2:1<2?
  • 整数1 -ge 整数2: 1>=2?
  • 整数 -le 整数2 : 1<=2?

[23 -ge 22] && echo “yes” || echo “no”

[23 -le 22] && echo “yes” || echo “no”

  1. 字符串判断:
  • -z:字符串:为空?
  • -n:字符串:非空?
  • 字串1==字串2:1==2?
  • 字串1!=字串2:1!=2?

name=fengjie

给name变量赋值

[-z “$name”] && echo “yes” || echo “no”

  1. 多重条件判断:
  • 判断1 -a 判断2:都成立为真,“与”
  • 判断1 -o 判断2:有一个成立为真,“或”
  • !判断:逻辑非,使原式的判断式取反

aa=11

[-n “$aa” -a “$aa” -gt 23] && echo “yes” || echo “no” 判断变量aa 是否有值,同时判断aa是否大于23

本文标题:Shell编程——正则表达式&&条件判断与流程控制(15)
文章作者:Cirry
发布时间:2016-08-08
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode
总访问量
总访客数人次