【问题标题】:Running variable string match against grep search?针对 grep 搜索运行变量字符串匹配?
【发布时间】:2018-05-30 21:39:25
【问题描述】:

我在这里定义了变量以稍微缩短逻辑。 wget 工作正常(下载正确的文件)并且 tar.gz 的 grepping 在 wget.log 中工作

问题是与另一个文件的匹配!

基本上,如果它在黑名单上,我希望它跳过!

var1=https://somewebsite.com/directory
line1=directory

sudo wget -O wget.log https://somewebsite.com/$line1/releases

if grep -q "tar.gz" wget.log | "$var1" -ne grep -q 
"https://somewebsite.com/$line1" banned; then
    echo "Good Job!"
else
    echo "Skip!"
fi

【问题讨论】:

  • 您到底在使用哪个外壳? sh 通常是指与 POSIX 兼容的 shell,但 bash 通常是 Linux 系统上的默认 shell。我个人更喜欢fish。无论如何,它们都在语法上有所不同,即使只是略有不同。此外,这些都不取决于底层的操作系统,因此您应用的 linux 标签是错误的。
  • "$var1" -ne grep -q 应该是什么意思,为什么要将第一个 grep 的输出传递给它?
  • grep -q 不会产生任何输出,因此将其输出通过管道传递给另一个命令是没有意义的。
  • 您能否包含wget.logbanned 文件的样本?如果您的问题包含MCVE,则诊断和制定解决方案会容易得多。
  • wget.log 将只是一个大的信息转储,搜索它是否包含任何 tar.gz 文件,第二个文件“禁止”只是一个包含不应检查的完整链接的文件再次反对。也对不正确的标签感到抱歉:) 仍在学习关于放置东西的定义。

标签: linux shell grep sh


【解决方案1】:

使用&& 测试两个grep 命令是否都成功

if grep -q -F 'tar.gz' wget.log && grep -q -F -x "$variable" banned
then
    echo "Skip!"
else
    echo "Good Job!"
fi

我使用了-F 选项到grep,因为我们要搜索的字符串都不是正则表达式,它们是固定字符串。我在第二个grep中使用了-x来匹配黑名单中的整行。

【讨论】:

  • 所以这个语法是有效的,但是 tar.gz 的目的只是一个广义的搜索,不作为一个完整的变量匹配,然而,第二个 grep(反对禁止)确实是一个精确的字符串匹配到另一个文件。
  • 这就是为什么我没有在第一个grep 上使用-x
  • 我觉得我对条件 if/then 有点生疏了。所以 tar 文件应该是 if/then 中的第一个检查,然后需要禁止另一个检查。回显 tarfile 现在让我胡言乱语(这是意料之中的,因为只有在转储中找到 tar.gz 时才会匹配),但如果我反对禁止,我认为格式会有所不同。所以我认为它应该是如果 tar.gz 在文件中匹配并且 $var1 在禁止中找不到,那么回显其他好工作,禁止,失败 fi?这是我在构建时遇到问题的语法:)谢谢您的任何建议
  • 如果网站被禁止,你为什么还要wget
  • 我想我现在明白你想要什么了,我已经更新了答案。
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
相关资源
最近更新 更多