Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376190
  • 博文数量: 61
  • 博客积分: 2451
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 21:24
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(44)

2010年(16)

分类: LINUX

2011-06-11 08:56:18

自己平学习时的一些关于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" 就是数值型
  1. [root@Server1 shelllearn]#cat a
  2. line1
  3. line2
  4. line2
  5. line4
  6. [root@Server1 shelllearn]#awk '""' a
  7. [root@Server1 shelllearn]#awk '"0"' a
  8. line1
  9. line2
  10. line2
  11. line4
  12. [root@Server1 shelllearn]#awk '"1"' a
  13. line1
  14. line2
  15. line2
  16. line4
  17. [root@Server1 shelllearn]#awk 'BEGIN{a=1+"a";print a}'
  18. 1
参考帖子:

==》3.date 命令的一些用法 
本来准备自己总结下的 呵呵 Bob 既然总结了 这里就贴下链接吧:

==》4.awk 引用shell外部变量
  1. [root@Server1 perllearn]#var="test"
  2. [root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
  3. test
  4. [root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
  5. test
  6. [root@Server1 perllearn]#var="test just"
  7. [root@Server1 perllearn]#awk 'BEGIN{print "'$var'"}'
  8. awk: BEGIN{print "test
  9. awk: ^ unterminated string
  10. [root@Server1 perllearn]#awk 'BEGIN{print "'"$var"'"}'
  11. test just
注意变量值中有空格和没空格的区别

==》5.grep 一用法

点击(此处)折叠或打开

  1. [root@Server1 shelllearn]#cat a
  2. abc
  3. cde
  4. [root@Server1 shelllearn]#cat b
  5. abc
  6. bce
  7. [root@Server1 shelllearn]#grep -vxFf b a
  8. cde
  9. [root@Server1 shelllearn]#join -j 1 -v 1 a b
  10. 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) |
0

上一篇:合并行

下一篇:perl 杂记Ⅲ

给主人留下些什么吧!~~