Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 解析文件以获取要存储到数组中的特定常量及其整数_Bash - Fatal编程技术网

Bash 解析文件以获取要存储到数组中的特定常量及其整数

Bash 解析文件以获取要存储到数组中的特定常量及其整数,bash,Bash,我有几个类似这样的异常类(是PHP,但现在不重要): 问题 我需要从所有文件中获取错误代码,将它们存储到一个数组中(索引是错误代码,值是常量名),以便按顺序打印 提示 所有文件都是.php文件 常量错误代码总是类似于const DEFAULT_uu[A-Z_u]_error_code=[0-9]+ 我试图存储在这样的数组中array[159]=“DEFAULT\u FILE\u NOT\u FOUND\u ERROR\u code” 我做了什么 我试着用我的一点Bash脚本知识来做的是一个脚本,

我有几个类似这样的异常类(是PHP,但现在不重要):

问题 我需要从所有文件中获取错误代码,将它们存储到一个数组中(索引是错误代码,值是常量名),以便按顺序打印

提示
  • 所有文件都是
    .php
    文件
  • 常量错误代码总是类似于
    const DEFAULT_uu[A-Z_u]_error_code=[0-9]+
  • 我试图存储在这样的数组中
    array[159]=“DEFAULT\u FILE\u NOT\u FOUND\u ERROR\u code”
  • 我做了什么 我试着用我的一点Bash脚本知识来做的是一个脚本,它解析所有这些php异常文件,只获取常量
    DEFAULT\u[…]\ u ERROR\u code=“number”

    这是我的脚本。sh正在尝试获取它:

    #! /bin/bash
    
    sed -n "s/const \(DEFAULT[A-Z_]*\) = \([0-9]*\);/$array[\2]=\1;/p" $1
    
    如果我这样做:
    script.sh

    它输出
    [159]=默认的\u文件\u未找到\u错误\u代码

    然后我尝试在其中放入一个变量“array”,如下所示:

    eval('$array(`sed -n "s/const \(DEFAULT[A-Z_]*\) = \([0-9]*\);/$array[\2]=\1;/p" $1`)')
    
    还有其他几种组合,但都没有成功

    为什么我要在stackOverflow中发布这个 我想知道是否有可能解决它,以及如何解决,或者是否有其他更简单的方法

    谢谢

    删除
    数组前面的“$”

    #! /bin/bash
    sed -n "s/.*const \(DEFAULT[A-Z_]*\) = \([0-9]*\);.*/array[\2]=\1;/p" $1
    
    现在将输出
    array[159]=默认\u文件\u未找到\u错误\u代码可用于设置数组元素的值:

    eval "$(find yourdir -name '*.php' -exec cat {} + | yourscript)"
    

    (我还在sed表达式中添加了一些
    *
    ,这样在php脚本的行中添加
    $(rm-ri/)
    就不会导致您对其进行计算。)

    eval
    行中的多个撇号(
    )是否会导致问题?内部的重音越重[但是stackoverflow不允许我在不丢失代码格式的情况下放置它。因此我使用了撇号。阅读以了解有关在代码示例中放置文字反勾号(严重重音)字符的更多信息。您也可以将行缩进四个空格,而不是使用反勾号(`)字符。谢谢,我明天(工作时)将尝试使用它。),如果行得通,我会接受你的回答
    eval "$(find yourdir -name '*.php' -exec cat {} + | yourscript)"