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

  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/aaronwxb/p/3105621.html
Copyright © 2011-2022 走看看