如何查找字符串可用的块名称?

时间:2017-10-04 09:25:07

标签: bash shell awk sed grep

如何找到字符串可用的块名称?

节的例子

server_pool pool_name {
    0:hostname:yes/no:profile:ip_address
    1:hostname:yes/no:profile:ip_address
    2:hostname:yes/no:profile:ip_address
    .:hostname:yes/no:profile:ip_address
    .:hostname:yes/no:profile:ip_address
    N:hostname:yes/no:profile:ip_address
}

server.conf文件

server_pool odd {
    0:server1:yes:profile_server1:192.168.1.1,192.168.1.2;
    1:server3:yes:profile_server3:192.168.1.5,192.168.1.6;
}

server_pool even {
    0:server2:yes:profile_server2:192.168.1.3,192.168.1.4;
    1:server4:yes:profile_server4:192.168.1.7,192.168.1.8;
}

#server_pool even {
#    0:server1:yes:profile_server1:192.168.1.1,192.168.1.2;
#    1:server3:yes:profile_server3:192.168.1.5,192.168.1.6;
#}

注: -

  1. “server_pool”是一个静态字符串
  2. “pool_name”可以是任何不带空格的字符串
  3. “如果一行有#在其中忽略它
  4. 要求

    当提供主机名作为server.conf文件的输入时,我期待它所属的pool_name的输出。

    例如

    server.conf<服务器1 然后它应该返回 “奇数”

    server.conf<服务器2 然后它应该返回 “偶”

2 个答案:

答案 0 :(得分:1)

from my_project.any_module import any_module

def __init__(self):
    print any_module.argument

说明:这里进行了两次检查,首先是清除以注释开头的记录和包含awk -v RS= '!/^#/&&/server2/{print $2}' input even awk -v RS= '!/^#/&&/server1/{print $2}' input odd 的记录,其中X是服务器的编号。 serverX设置为空白以使awk将para作为单个记录。

您可以使用以下RS变量作为输入,其中host是设置值的变量:

bash

答案 1 :(得分:1)

尝试以下脚本并告诉我这是否对您有所帮助。根据您的需要,此脚本将需要给出一个参数。然后将从您的Input_file匹配,并根据该池名称进行打印。

cat script.ksh
var=$1
awk -v VAR="$var" -F' +|:' '/^}/{flag=""} /^server_pool/{flag=1;pool=$2;;next} flag && $0 ~ VAR{print pool}' Input_file

以下是我运行时的输出。

./script.ksh server1
odd