awk和sed 应用shell脚本变量
2011-01-11 02:27
691 查看
最近在写一些脚本增加工作效率,当然少不了则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
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
相关文章推荐
- Shell 脚本分割变量分别赋值与sed 应用打印特殊行
- Shell脚本学习笔记(七)--sed和awk
- sed和awk中使用shell变量
- Linux基本功十三:shell脚本Sed & Awk 及软件的安装
- Shell脚本(1)变量应用
- sed和awk中使用shell变量
- 【转载】sed和awk中使用shell变量
- 如何在shell脚本文件中获取awk的值, 存于变量中?
- shell脚本---grep、awk、sed工具
- 在Shell脚本中编写AWK脚本实现数据提取—注意格式、awk中使用shell变量、awk中数字字符串转换成数字、awk中字符串相等比较
- sed、awk调用shell变量的方法
- sed && awk工具 及一些常用的shell脚本
- linux下shell脚本中sed命令使用变量
- shell 脚本之 cut awk sed 命令详解
- shell awk实现实时监控网卡流量脚本(常见应用二)
- shell脚本之正则表达式、函数、grep、sed、awk、printf等基本命令配置详解
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
- shell awk实现实时监控网卡流量脚本(常见应用二)
- shell脚本抽取制定字符串、grep+awk+cut+sed
- sed、awk调用shell变量的方法