Bash grep读取输入的多模式
所以我制作了一个bash脚本,greps是重定向文件上的主机名。但是,有些主机的名称为“-”或“\u1” 全球技术法规SRV123东部 全球技术法规-SRV123-EST 现在,我所做的是,grep只是FQDN的一部分,比如SRV123 是否有一种方法可以grep主机,即使我只放置FQDNGTR\u SRV123\u EST,它仍将匹配此GTR-SRV123-EST 我有一个询问主机名的提示: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
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}/*
Wiyhhost=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}/*