【问题标题】:pcregrep in bash function not working properlybash 函数中的 pcregrep 无法正常工作
【发布时间】:2017-10-24 13:28:46
【问题描述】:

我正在编写一个检查配置文件的脚本。为了一次检查多行,我使用了 pcregrep。当我在命令行中使用它时,一切都很好。

当我把它放在一个函数中时,它并没有找到模式。

这是我的功能

function pcregrepF() {
    echo pcregrep -M "$string" $path
    if `pcregrep -M $string $path`; then
            echo "$path --> $string_msg is configured OK"
    else
            echo "$path --> $string_msg is NOT configured correctly"
    fi
}

echo pcregrep -M "$string" $path 只是一个控件,用于验证它是否需要 pcregrep 命令获取好的变量

当我使用函数执行文件时,控制台中有以下内容

/etc/yum.repos.d/nginx.repo --> 'NGINX repository' repository is NOT configured correctly
  • 有趣的事情:当我复制粘贴控制台中显示的echo pcregrep -M "$string" $path的结果时,即:

    pcregrep -M ".*[nginx]*\n.*name=nginx.*.repo*\n.*baseurl=http://nginx.org/packages/centos/.*.releasever/.*.basearch/*\n.*gpgcheck=0*\n.*priority=1*
    

它就像一个魅力

更新:实际上我正在尝试解析 CSV 文件中的正则表达式和路径,下面的行是列名和文件内容的示例:

function,string,string_msg,path,package,space,
pcregrepF,".*[nginx]*\\n.*name=nginx.*.repo*\\n.*baseurl=http://nginx.org/packages/centos/.*.releasever/.*.basearch/*\\n.*gpgcheck=0*\\n.*priority=1*\\n.*enabled=1",NGINX repository,/etc/yum.repos.d/nginx.repo,, ,

这是读取 CSV 文件并在第一列中调用一个或另一个函数的函数:

# Execute CSV - Read CSV file line by line and execute commands in   function of parameters that are read
function executeCSV() {
    file=/home/scripts/web.csv
    while IFS="," read function string string_msg path package space
    do
            $function $string $string_msg $path $package
    done < $file
}

executeCSV

我希望它可以帮助解决问题。

我错过了什么??????

提前致谢

【问题讨论】:

  • 你真的想用反引号写pcregrep吗?输出将作为命令执行,然后将其输出发送到if。此外,您在$string$path 周围缺少"-引号。
  • 感谢双方,已经尝试了所有组合:有和没有反引号,有和没有反引号,以及这两种情况下所有可能的组合,没有任何变化

标签: bash function pcregrep


【解决方案1】:

您正试图在您的脚本中执行pcregrep输出;去掉反引号。

pcregrepF() {
  echo pcregrep -M "$string" "$path"
  if pcregrep -M "$string" "$path"; then
    echo "$path --> $string_msg is configured OK"
  else
    echo "$path --> $string_msg is NOT configured correctly"
  fi
}

【讨论】:

  • 感谢双方,已经尝试了所有组合:有和没有反引号,有和没有反引号,以及这两种情况下所有可能的组合,没有任何变化
  • @Abel 这是正确的。问题是您错误地调用了该函数:根据您的帖子,您的正则表达式中嵌入了文字双引号。它不应该有。考虑使用您尝试匹配的数据和函数的实际调用来更新问题。
【解决方案2】:

发现错误

实际上在读取 CSV 文件时,该过程会在每个参数周围添加 ' '。我的 csv 如下所示:

function,string,string_msg,path,package,space,

pcregrepF,"something to search",message to show,path to the file,, ,

当读取第二个参数时,它会在其周围添加'',因此最终字符串将是'"something to search"',并且由于双引号,显然没有任何东西。

我是否以错误的方式读取 CSV 文件????

在使用 bash 从 csv 读取时,有什么方法可以避免这种字符的添加???

谢谢!

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2017-12-15
    • 2013-03-27
    • 2012-08-15
    • 2013-11-05
    相关资源
    最近更新 更多