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:只统计字符数
1wc /etc/passwd2wc -l /etc/passwd
Shell条件判断与流程控制——条件判断式语句
- 按照文件类型判断:
- -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”
- 按照文件权限进行判断
- -r 文件:存在?rw?
- -w 文件:存在?w?
- -x 文件:存在?x?
- -u 文件:存在?SUID?
- -g 文件:存在?SGID?
- -k 文件:存在?SBIT?
[-w student.txt] && echo “yes” || echo “no”
判断文件是否拥有写权限
- 两个文件之间进行比较:
- 文件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 -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”
- 字符串判断:
- -z:字符串:为空?
- -n:字符串:非空?
- 字串1==字串2:1==2?
- 字串1!=字串2:1!=2?
name=fengjie
给name变量赋值
[-z “$name”] && echo “yes” || echo “no”
- 多重条件判断:
- 判断1 -a 判断2:都成立为真,“与”
- 判断1 -o 判断2:有一个成立为真,“或”
- !判断:逻辑非,使原式的判断式取反
aa=11
[-n “$aa” -a “$aa” -gt 23] && echo “yes” || echo “no” 判断变量aa 是否有值,同时判断aa是否大于23