来自读取输入的grep多个模式

时间:2019-07-02 11:45:28

标签: bash shell unix scripting

所以我制作了一个bash脚本,使重定向文件上的主机名变得扑朔迷离。但是,有些主机以“-”或“ _”命名

GTR_SRV123_EST GTR-SRV123-EST

现在,我所做的是,grep只是FQDN的一部分,例如 SRV123

即使我只放置了FQDN GTR_SRV123_EST ,有没有办法我可以对主机进行grep,并且仍然可以匹配此 GTR-SRV123-EST

我提示要求输入主机名:

echo -n "Please enter the host: "
read $host


grep -i $host ${temp}/*

更新: 在Juan的命令下,它是否也起作用了。但是,目录路径显示在输出中。我该如何摆脱它。

/export/home/aa12s/GLB-TXU/temp/

当前输出:

/export/home/aa12s/GLB-TXU/temp/GBL-ASA-A:100022FBC0D00038 gbl-asa-a-mode1 5005076801103673 active gbl-ac-wbg02

所需的输出:

GBL-ASA-A:100022FBC0D00038 gbl-asa-a-mode1 5005076801103673 active gbl-ac-wbg02

命令:

grep -iE "$(echo $host| awk -F '/export/home/aa12s/GLB-TXU/temp/' '{$2=$1;a=gsub(/_/, "-",$2); print $1"|"$2}' 2>/dev/null)" ${temp}/*

4 个答案:

答案 0 :(得分:1)

编辑图案。

echo -n "Please enter the host: "
read host # Edit: not $host
host="${host//[_-]/\[_-\]}" # turn either into a *check* for either

grep -i "$host" ${temp}/*

答案 1 :(得分:0)

hacky种类,但是尝试一下:

grep -Ei "$(echo $host| awk '{$2=$1;gsub(/_/, "-",$2);print $1"|"$2}' 2>/dev/null)" ${temp}/*

要摆脱文件路径:

grep -iE "$(echo $host| awk '{$2=$1;gsub(/_/, "-",$2);print $1"|"$2}' 2>/dev/null)" ${temp}/* 2>/dev/null|awk -F \/ '{print $NF}'

注意:文件内容中不能包含斜线。

答案 2 :(得分:0)

如果没有同时带有_和-的主机名,则可以使用。

输入的主机仅包含_

grep -iE $(echo $host | tr "_" "-")\|$host ${temp}/*

输入的主机仅包含-

grep -iE $(echo $host | tr "-" "_")\|$host ${temp}/*

输入的主机同时包含_和-

grep -iE $(echo $host | tr "_" "-")\|$(echo $host | tr "-" "_")\|$host ${temp}/*

答案 3 :(得分:0)

您可以使用反向引用:

([_-]) : capture either _ ou - in group 1
\1 : reference group 1

尝试此命令:

grep -iE "([_-])$host\1" ${temp}/*

https://regex101.com/r/uH5SHC/1/

host=SRV123,您将捕获:

  • GTR_SRV123_EST
  • GTR-SRV123-EST

不是

  • GTR_SRV123-EST