所以我制作了一个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}/*
答案 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
,您将捕获:
不是