zoukankan      html  css  js  c++  java
  • 【Z】awk中使用shell的环境变量

    最近在写一些脚本增加工作效率,当然少不了则awk和sed则两大法宝。在引用脚本中变量上遇到问题,上网上找到一些说明,方法很多。例如awk:

    awk中使用shell的环境变量
    一:"'$var'"
    这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:
    var="test"
    awk 'BEGIN{print "'$var'"}'
    这种写法其实际是双括号变为单括号的常量,传递给了awk.
    如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:
    var="this is a test"
    awk 'BEGIN{print "'"$var"'"}'
    二:'"$var"'
    这种写法与上一种类似.如果变量含空格,则变为'""$var""'较为可靠.
    三.把括起awk程序的''变为"",使用"$var"
    如:
    $var="this is a test"
    awk 'BEGIN{print "$var"}"
    这是因为在""里$是特殊字符,而在''里$是普通字符.
    四:export 变量,使用ENVIRON["var"]形式,
    如:
    $var="this is a test";export $var
    awk 'BEGIN{print ENVIRON["var"]}'
    五:当然也可以使用-v选项
    如:
    $var="this is a test"
    awk -v nvar="$var" '{print nvar}'
    这样便把系统变量定义成了awk变量.

    多了感觉记不住。刚刚得出一个很好记的方法。均实验成功。

    1.awk '{command}'  中引用变量用单引号。

    king@king-desktop:~/Accaculation/script$ GW=gateway
    king@king-desktop:~/Accaculation/script$ awk '/'$GW'/{print $2}'  /etc/network/interfaces
    192.168.0.11
    king@king-desktop:~/Accaculation/script$ awk ''/$GW/'{print $2}'  /etc/network/interfaces
    192.168.0.11

    king@king-desktop:~/Accaculation/script$ awk ''/$GW/','/$ADD/'{print $2}'  /etc/network/interfaces
    192.168.0.11

    同样sed一样可以

    king@king-desktop:~/Accaculation/script$ UN=192.168.0.2

    king@king-desktop:~/Accaculation/script$ sed  -n 's/192.168.0.11'/"$UN"/'p' /etc/network/interfaces
    gateway 192.168.0.2

    king@king-desktop:~/Accaculation/script$ sed  -n "/"$GW"/p" /etc/network/interfaces
    gateway 192.168.0.11

    2.awk "{command}"  中引用变量用双引号:

    king@king-desktop:~/Accaculation/script$ awk ""/$ADD/","/$GW/"{print $2}"  /etc/network/interfaces
    address 192.168.0.71
    netmask 255.255.255.0
    gateway 192.168.0.11
    这样就不行了:

    king@king-desktop:~/Accaculation/script$ awk "'/$ADD/','/$GW/'{print $2}"  /etc/network/interfaces
    awk: '/address/','/gateway/'{print }

    awk: ^ 表达式中的无效字符“'”
    -------------------------------------------------------------------

    3.含有空格的字符串的变量的引用:

    不适用的例子就不举了,免的越看越迷糊,好奇心重的可以去试试。

    ADD="address 192"

    king@king-desktop:~/Accaculation/script$ awk ''/"$ADD"/'{print $2}' /etc/network/interfaces
    192.168.0.71
    king@king-desktop:~/Accaculation/script$ sed -n ''/"$ADD"/'p' /etc/network/interfaces
    address 192.168.0.71

    都可以用。至于" "  在所引起的sed和awk命令格式的我就不举了。

    1.确实不好用,对应上面的粗体看看有什么区别。

    king@king-desktop:~/Accaculation/script$  awk ""/"$ADD"/"{print $2}" /etc/network/interfaces
    address 192.168.0.71

    2.不符合总结得出的简单规律--单引号引用的命令用单引号引用变量,含有空格的变量多加先用双引号引用。
     同样的mysql -uroot  -e " select  *  from  table  where pid="$PID" "  同样生效 。单引号的有兴趣的去试试。

    本文出自 “king” 博客,请务必保留此出处http://king9527.blog.51cto.com/84461/476262

  • 相关阅读:
    Java虚拟机(第二版) 学习笔记之Class类文件的结构
    JVM之深入浅出之垃圾收集算法
    Java虚拟机(第二版) 学习笔记之OutOfMemoryError
    Java虚拟机(第二版) 学习笔记
    平滑加权轮询负载均衡(轮询)算法
    java AQS(AbstractQueuedSynchronizer)同步器详解
    mybatis Interceptor拦截器代码详解
    aspectj编程简介
    Java并发编程阅读笔记-Java监视器模式示例
    我们该怎么结合日志做优化
  • 原文地址:https://www.cnblogs.com/aaronwxb/p/3105621.html
Copyright © 2011-2022 走看看