Bash grep读取输入的多模式

Bash grep读取输入的多模式,bash,shell,unix,scripting,Bash,Shell,Unix,Scripting,所以我制作了一个bash脚本,greps是重定向文件上的主机名。但是,有些主机的名称为“-”或“\u1” 全球技术法规SRV123东部 全球技术法规-SRV123-EST 现在,我所做的是,grep只是FQDN的一部分,比如SRV123 是否有一种方法可以grep主机,即使我只放置FQDNGTR\u SRV123\u EST,它仍将匹配此GTR-SRV123-EST 我有一个询问主机名的提示: echo -n "Please enter the host: " read $host grep

所以我制作了一个bash脚本,greps是重定向文件上的主机名。但是,有些主机的名称为“-”或“\u1”

全球技术法规SRV123东部 全球技术法规-SRV123-EST

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

是否有一种方法可以grep主机,即使我只放置FQDNGTR\u SRV123\u EST,它仍将匹配此GTR-SRV123-EST

我有一个询问主机名的提示:

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


grep -i $host ${temp}/*
更新: 在胡安的指挥下,它也开始工作了。但是,目录路径显示在输出上。我怎样才能摆脱它

/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}/*
有点黑,但试试看:

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}'

注意:斜杠不能出现在文件内容中。

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

输入的主机仅包含_ 输入的主机仅包含- 输入的主机包含u和-
您可以使用反向引用:

([_-]) : capture either _ ou - in group 1
\1 : reference group 1
请尝试以下命令:

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

Wiyh
host=SRV123
,您将捕获:

  • 全球技术法规SRV123东部
  • 全球技术法规-SRV123-EST
而不是

  • 全球技术法规SRV123-EST
编辑您的图案

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

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

这是他们给你的
GTR[-\]SRV123[-\]EST
作为模式,不幸的是,主机名彼此不同。。。它可以是
glb\u servername\u bas1、servername\u bas1、glb\u servername
。。因此,很难过滤模式:(我所做的只是在
-
-
上进行全局替换,以便它们总是搜索其中一个。这难道不能解决问题吗?如果用户键入
GLB-SERVERNAME
,那么
grep-I“GLB[-\u]SERVERNAME”${temp}/*
仍能找到它,否?否没有输出。请使用
${temp}/*
中的示例文件编辑OP,并使用所需的结果输出作为
主机输入您希望允许的内容的具体示例。尝试了3个,但没有任何效果:(我猜是输入的主机包含uu/,“-”,$2);打印$1“|“$2}”2>/dev/null)”${temp}/*
。但是,输出中也会显示此路径
/export/home/aa12s/GLB-TXU/temp/'
。你知道我如何摆脱它吗?我尝试添加
-F'/export/home/aa12s/GLB-TXU/temp/'
,但它仍然存在。你能帮我删除此路径吗
/export/home/aa12s/GLB-TXU/temp/
请:(尝试了这是因为出现错误
grep:Invalid back reference
,所以我尝试使用
-ei
,但它会打印文件中的所有信息。相反,我使用了
-iE
,它可以工作。但是,此目录路径(/export/home/aa12s/GLB-TXU/temp/)是从输出中包括的。尝试通过添加
-F/export/home/aa12s/GLB-TXU/temp/
来删除它,但它不起作用..删除它有什么办法吗?宾果!!谢谢,兄弟@Juan Diego Godoy。你帮了大忙。
grep-iE“$(echo$host | awk'{$2=$1;a=gsub(/,“-”,$2);print$1“|”$2>/dev/null)”config/temp/*;awk-F\/'{print$NF}'
([_-]) : capture either _ ou - in group 1
\1 : reference group 1
grep -iE "([_-])$host\1" ${temp}/*
echo -n "Please enter the host: "
read host # Edit: not $host
host="${host//[_-]/\[_-\]}" # turn either into a *check* for either

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