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

  • 相关阅读:
    微信小程序开发
    layer 弹出框的使用
    [转]如何把别人项目代码修改后 提交到github
    [转载]Github轻松上手1-Git的工作原理与设置
    [学]git 原理学习
    Dynamics CRM Form表单中通过javascript抓取触发change事件字段的属性名
    技巧:多共享动态库中同名对象重复析构问题的解决方法
    The encryption certificate of the relying party trust identified by thumbprint is not valid
    Cannot start service MSSQL$MICROSOFT##WID on computer
    Hive操作语句实例讲解(帮助你了解 桶 bucket)
  • 原文地址:https://www.cnblogs.com/aaronwxb/p/3105621.html
Copyright © 2011-2022 走看看