sort命令
sed命令
总结:
- sed是一个非交互式的文本编辑工具,通常在sell脚本中使用;
- sed每次去处理文件的时候都会将内容拿到一个临时缓冲区(模式空间)中,每次处理一行,就会输出到屏幕上。之后将缓存区中的内容清除,再去读取新的行内容;
- 不支持将修改后的文件内容直接写入源文件中,是系统本身的问题。如果想要修改源文件,可以使用-i的选项,也可以多次使用数据流重定向来解决;
- 因为其本身是一个逐行处理,但是某些需求会和sed本身工作方式有冲突,比如只想替换某行中的内容,就需要使用"ns/word1/word2/g",某几行可以使用"n1,n2s/word1/word2/g"(n1,n2表示第n1到n2行)。还有另一种可能,某一行中存在多个相同字符,就需要使用"s/word1/word2/n";
- 多条数据应用,
sed 1s/o/*/1;1s/o/*/1
,源内容为"hello teduhadoop",表示替换第一行中的前两个o。为什么第二条中的结尾也写成1?因为此语句是两个应用动作,第一条语句执行完之后,原文中的第一个"o"已经修改为"*"。
cut命令
[root@node01 ~]# sort demo.txt
192.168.1.1
192.168.1.3.4
192.168.1.4.5.6.7
192.168.1.7.8.9
[root@node01 ~]# sort demo.txt |grep -o .$
1
4
7
9
[root@node01 ~]#
可以使用重定向将结果输入到demo文件中,-o代表的是只输出匹配的选项,.$是正则表达式,表示最后一位单字符
history
shell高级
案例1:
shell脚本参数
[root@node01 ~]# sh test1.sh 1 2 3 4
this script $* is:1 2 3 4
this script $@ is:1 2 3 4
[root@node01 ~]#
执行结果是一样的
编写test2.sh脚本:
#!/bin/bash
#script name:test2.sh
for i in "$*";do
echo $1
done
echo "================"
for i in "$@";do
echo $i
done
exit 0
执行结果:
[root@node01 ~]# sh test2.sh 1 2 3 4
1
================
1
2
3
4
[root@node01 ~]#
条件判断语句
if判断
例如:
#!/bin/bash
#判断两个数字的大小
a=$1
b=$2
if [ $a -gt $b ];then
echo "YES! $a>$b"
fi
if [ $a -le $b ]
then
echo "YES $a<=$b"
fi
执行:
[root@node01 ~]# sh test3.sh 1 2
YES 1<=2
case判断