CUT
cut 工作就是剪,具体就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut [选项参数] filename
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列
cut -d " " -f 2,3 cut.txt //切割第二列和第三列
cat .cut.txt | grep guan |cut -d " " -f 1 //过滤之后再进行切割
选取系统PATH变量值,第2个“:”开始后的所有路径
echo $PATH | cut -d : -f 3-
获取ifconfig eth0 的ip地址
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr"
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 1
inet addr
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.101 Bcast
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
192.168.1.101
SED
基本介绍:
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,
称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾,文件内容并没有改变,除非你使用重定向存储输出。
sed
a 新增,a的后面可以接子串,在下一行出现
d 删除
s 查找并替换
g 是全局
-e 是多个命令 同时执行
将“mei nv ”这个词插入到sed.txt第二行下打印
[lyp@hadoop101 datas]$ sed "4 a 美 女" cut.txt
默认切割的是空格是一个 需要指定两个
cut -t " " -p 2 2 cut.txt
shen dong
zhen guan
美 女
wo wo
lai lai
le le
[lyp@hadoop101 datas]$ sed "/wo/d" cut.txt
默认切割的是空格是一个 需要指定两个
cut -t " " -p 2 2 cut.txt
shen dong
zhen guan
lai lai
le le
//将sed.txt文件的第二行删除并将wo替换为ni
sed -e "2d" -d "s/wo/ni/g"
[lyp@hadoop101 datas]$ sed -e "2d" -e "s/wo/ni/g" cut.txt
默认切割的是空格是一个 需要指定两个
shen dong
zhen guan
ni ni
lai lai
le le
awk
基本介绍:
awk 一个文本分析工具,把文本逐行的读入,
以空格为默认分隔符将每行切片,切开的部分在进行分析处理
——F 指定输入文件分隔符
-v 赋值一个用户定义变量
FILENAME 文件名
NR 已读的记录数 ----行号
NF 浏览记录的域的个数(切割后,列的个数) ------------列号
1)搜索passwd 文件以root关键字开头的所有行,并输出改行的第7列。
[lyp@hadoop101 datas]$ awk -F : '/^root/{print$7}' passwd //输出第7列的前提条件是/^root开头的
/bin/bash
2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","分割
[lyp@hadoop101 datas]$ awk -F : '/^root/{print$1","$7}' passwd
root,/bin/bash
3)只显示/etc/passwd/的第1列和第7列,以逗号分割,且在所有行前面添加列名user,
shell 在最后一行添加"dahaige, /bin/zuihi"
[lyp@hadoop101 datas]$ awk -F : 'BEGIN{print "user,shell"} {print$1","$7} END{print "dahaige, bin/zuihi"}' passwd
user,shell
root:x:0:0:root:/root:/bin/bash,
bin:x:1:1:bin:/bin:/sbin/nologin,
daemon:x:2:2:daemon:/sbin:/sbin/nologin,
adm:x:3:4:adm:/var/adm:/sbin/nologin,
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin,
sync:x:5:0:sync:/sbin:/bin/sync,
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown,
halt:x:7:0:halt:/sbin:/sbin/halt,
mpty/sshd:/sbin/nologin,
tcpdump:x:72:72::/:/sbin/nologin,
lyp:x:500:500::/home/lyp:/bin/bash,
dahaige, bin/zuihi
4)将passwd文件中的用户id增加数值1并输出
[lyp@hadoop101 datas]$ awk -F : -v i=1 '{print $3+i}' passwd
1
2
3
4
5
5)
[lyp@hadoop101 datas]$ awk -F : '{print FILENAME"-"NR"-"NF}' passwd
passwd-1-7 //读取文件passwd 第1行,切完是一共7列
passwd-2-7
passwd-3-7
passwd-4-7
passwd-5-7
passwd-6-7
passwd-7-7
6)读取ifconfig 的IP地址
[lyp@hadoop101 datas]$ ifconfig eth0 | grep "inet addr" | awk -F : '{print $2}'| awk -F " " '{print $1}'
192.168.1.101
7)查询sed.txt中空行所在的行号
[lyp@hadoop101 datas]$ awk '/^$/{print NR}' cut.txt
7
8
sort 命令
sort (选项)(参数)
-n 依照数值的大小排序 1、2、3、
-r 以相反的顺从来排序 倒序
-t 设置排序时所用的分隔符
-k 指定需要排序的列
要求以第二列的数值进行排序
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
[lyp@hadoop101 datas]$ sort -t : -nk 2 sortdemo.sh
cls:10:3.5
bd:20:4.2
ss:30:1.6
bb:40:5.4
xz:50:2.3
[lyp@hadoop101 datas]$ cat scort.txt |awk -F " " 'sum+=$2' scort.txt
张三 40
李四 50
王武 60
[lyp@hadoop101 datas]$ cat scort.txt |awk -F " " '{sum+=$2} END {print sum}' scort.txt
150
shell 脚本里如何检查一个文件是否存在
#!bin/bash
if [ -f file.txt ];then
echo "文件存在"
else
echo "文件不存在"
fi
shell脚本对文本中无序的一列数字排序 并累加求和
case num.txt
1
4
2
6
3
7
10
0
5
9
sort -n num.txt | awk '{a+=$0;print$0} END{print "sum="a}'
shell 脚本下写出查找当前文件夹(/home)下所有的文本文件内容包含有字符"shen"的文件名称
[lyp@hadoop101 datas]$ grep -r shen /home
/home/lyp/datas/cut.txt:shen dong
[lyp@hadoop101 datas]$ grep -r shen /home | cut -d ":" -f 1
/home/lyp/datas/cut.txt
2.函数
2.1函数介绍
shell编程和其他编程语言一样,有系统函数,也可以自定义函数
2.2. 系统函数
basename 基本语法
功能:返回完整路径最后/的部分 ,常用于获取文件的名
basename [pathname] [suffix]
basename [string][suffix] 功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来
suffix为后缀,如果suffix被制定了,basename会将pathname或string中的suffix去掉
dirname 基本语法
功能:返回完整路径最后 /的前面部分,常用于返回路径部分
dirname 文件绝对路径(功能描述:从给定的包含绝对路径的文件中去除文件名(非目录部分),然后返回剩下的路径)
例1
2.3 自定义函数
基本语法
[function] funname[()]
{
Action;
[return int];
}
调用直接写函数名:funname [值]
例1
#!/bin/bash
#案例1、计算两个参数的和(read) .getSum
function getSum(){
SUM=$[$n1+$n2]
echo "和是:$SUM"
}
read -p "请输入第一个参数值:" n1
read -p "请输入第二个参数值:" n2
#调用getSum
getSum $n1 $n2