自己平学习时的一些关于shell的杂七杂八的东西,做个记录:1.sed r 使用需要注意的地方
2.awk pattern 判断真假要分数值型还是字符型
3.关于date的说明
4.awk 应用shell变量
5.grep 一用法
6.awk 处理多个文件方法
7.sed 实现tac功能
8.sed // 解释
9.sed 分隔数字
10.理解下面的几个式子就理解了单双引号了
==》1. sed r 使用需要注意的地方
下面这个帖子给予了很好的说明:
==》2.awk pattern 判断真假要分数值型还是字符型
pattern 当然匹配为真(1)不匹配为假(0)
pattern 如果是数值型0为假 1 为真
pattern 如果是字符型“0” “1” 都为真,“”空字符为假
awk 类型为自动转换
1“a” 整个就是字符型
1+"a" 就是数值型
- [root@Server1 shelllearn]#cat a
-
line1
-
line2
-
line2
-
line4
-
[root@Server1 shelllearn]#awk '""' a
-
[root@Server1 shelllearn]#awk '"0"' a
-
line1
-
line2
-
line2
-
line4
-
[root@Server1 shelllearn]#awk '"1"' a
-
line1
-
line2
-
line2
-
line4
- [root@Server1 shelllearn]#awk 'BEGIN{a=1+"a";print a}'
- 1
参考帖子:
==》3.date 命令的一些用法
本来准备自己总结下的 呵呵 Bob 既然总结了 这里就贴下链接吧:
==》4.awk 引用shell外部变量
- [root@Server1 perllearn]#var="test"
-
[root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
-
test
-
[root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
-
test
-
[root@Server1 perllearn]#var="test just"
-
[root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
-
awk: BEGIN{print "test
-
awk: ^ unterminated string
-
[root@Server1 perllearn]#awk 'BEGIN{print "'"$var"'"}'
-
test just
注意变量值中有空格和没空格的区别
==》5.grep 一用法
- [root@Server1 shelllearn]#cat a
- abc
- cde
- [root@Server1 shelllearn]#cat b
- abc
- bce
- [root@Server1 shelllearn]#grep -vxFf b a
- cde
- [root@Server1 shelllearn]#join -j 1 -v 1 a b
- cde
grep: -v invert match
-x 完全匹配
-Ff 文件中的每一行为一pattern
作用:输出a中有b中没有的行
join -j 1 -v 1 a b
相当于数据库左外连接
-v 输出第一个文件中与第二文件不相等的部分
==》6.awk处理多个文件方法
1.FILENAME 内置变量
[root@Server1 shelllearn]#awk '{print FILENAME}' a b
a
a
b
b
2.NR与FNR的大小关系:NR==FNR时表示第一个文件,NR>FNR时表示第二个文件(只区分两个文件)
3.ARGIND 是数组ARGV的小标而数组ARGV中存的是命令行参数。
[root@Server1 shelllearn]#awk 'END{for(i in ARGV)print ARGV[i]}' a b
awk
a
b
下标从0开始所以当ARGIND==1时表示第一个文件以后类推
==》7.sed 实现tac功能
[root@Server1 shelllearn]#cat a
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
[root@Server1 shelllearn]#tac a
sohu 100 4500
guge 50 3000
baidu 100 5000
google 110 5000
[root@Server1 shelllearn]#sed -n '{$ba;{1{h;d};x;H;b};:a;x;H;x;p}' a
sohu 100 4500
guge 50 3000
baidu 100 5000
google 110 5000
sed -n
'{
$ b a #to the label a
{
1 {
h #第一行时copy to hold space
d #delete content in pattern space and begin next circle
}
x #exchange the contents of the hold space and pattern space
H #append pattern space to hold space
b #to the end of script
}
:a
x
H
x
p
}'
a
==》8.sed // 解释
[root@Server1 shelllearn]#cat a
aa
bb
cc
dd
[root@Server1 shelllearn]#sed '/aa/N;//D' a
bb
cc
dd
//是最近使用过的正则表达式在此处是/aa/
==》9.sed 分隔数字
[root@Server1 shelllearn]#echo "123456789" | sed '{:a;s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;t a}'
123,456,789
==》10.单双引号
A=0
awk "{print \$$A}" 1.txt #\在""中时被解释的
awk \{print\ \$$A\} 1.txt #\转译{、$、}字符避免被shell解释 而传给awk而$A被shell解释 替换
awk '{print $'$A'}' 1.txt #'{print $' 传给awk和'}'也传给awk,$A留给shell替换
awk '{print $'"$A"'}' 1.txt # 注:"$A" 包在 soft quote 中
==》11.
阅读(3062) | 评论(0) | 转发(0) |