总结:
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"已经修改为"*"。[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代表的是只输出匹配的选项,.$是正则表达式,表示最后一位单字符
案例1:
执行结果是一样的 编写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 ~]#例如:
#!/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