请教关于查找字符串的精确匹配问题和awk命令引入shell变量的问题。

请教关于查找字符串的精确匹配问题和awk命令引入shell变量的问题。

请教关于查找字符串的精确匹配问题和awk命令引入shell变量的问题。

编一个简单的script.
read hostname
要求用户输入hostname,然后填入/etc/hosts中。
要求填入前,确保该$hostname 不能在/etc/hosts中存在。

但这时遇到难题。hosts格式通常是
[macg@machome ~]$ more hosts
#
# Internet host table
#
127.0.0.1       localhost              
192.168.188.1   tsomc   tsomc.localdomain loghost       MMILAN-2
# omcr
10.31.0.5       OMCLAN-1-omc
10.31.0.9       OMCLAN-2-omc
10.31.0.1       OMC3-PSU        omc omcr

假如输入的是OMCLAN,那么这个name在/etc/hosts中是不存在的。
但grep $hostname /etc/hosts会显示两个匹配.这就涉及到如何对以空格作为分隔符号的字符串的精确匹配问题。好象grep,sed都不支持这种精确匹配

awk是支持空格分隔符号的。如:awk '$2=="OMCLAN" {printf("%s\n",$1)}'  /etc/hosts
但这时又带来一个问题,如何把变量$hostname引入awk命令中

总结,问题有两个:
1。如何解决以空格分隔的字符串的精确匹配的问题
2。awk命令引用shell变量的问题      
复制内容到剪贴板
代码:
[color=blue]-(user@host:tty)-(tmp)-
[18252 1] $ [/color]cat hosts
#
# Internet host table
#
127.0.0.1 localhost
192.168.188.1 tsomc tsomc.localdomain loghost MMILAN-2
# omcr
10.31.0.5 OMCLAN-1-omc
10.31.0.9 OMCLAN-2-omc
10.31.0.1 OMC3-PSU omc omcr
[color=blue]-(user@host:tty)-(tmp)-
[18252 0] $ [/color]grep OMCLAN hosts
10.31.0.5 OMCLAN-1-omc
10.31.0.9 OMCLAN-2-omc
[color=blue]-(user@host:tty)-(tmp)-
[18252 0] $ [/color]grep '[[:space:]]OMCLAN$' hosts
[color=blue]-(user@host:tty)-(tmp)-
[18252 1] $ [/color]shellvar="Hello, world"
[color=blue]-(user@host:tty)-(tmp)-
[18252 0] $ [/color]awk -v awkvar="$shellvar" 'BEGIN { print awkvar; }'
Hello, world
[color=blue]-(user@host:tty)-(tmp)-
[18252 0] $ [/color]
      
另: 欢迎我们的新朋友 macg       
hi,
谢谢谢谢。原来grep就能解决,用了awk和sed一直有点瞧不起grep,看来还是自己学得摸棱两可。

awk调用shell变量,琢磨半天。原来在awk变量是不带$的,和字段变量$1,$2不同。

[macg@machome ~]$ vi temp

read hn
awk -v hn1=$hn '$2==hn1 {printf("%s\n",$1)}'  /etc/hosts
[macg@machome ~]$ sh temp
OMCLAN
1.1.1.1      
复制内容到剪贴板
代码:
[0 root@huan /tmp/work]# grep 1 txt
1
11

[0 root@huan /tmp/work]# grep 1 txt -w
1

[0 root@huan /tmp/work]#