将特定字符串添加到数组 sed/awk/grep

Sam*_*ynn 2 command-line bash scripts text-processing

我有这个

ciscoFlashCopyStatus 对象类型
        语法整数
                {  
                copyOperationPending(0),
                copyInProgress(1),
                复制操作成功 (2),
                copyInvalidOperation (3),
                copyInvalidProtocol (4),
                copyInvalidSourceName (5),
                copyInvalidDestName (6),
                copyInvalidServerAddress (7),
                copyDeviceBusy (8),
                copyDeviceOpenError (9),
                复制设备错误(10),
                copyDeviceNotProgrammable (11),
                copyDeviceFull (12),
                copyFileOpenError (13),
                copyFileTransferError(14),
                copyFileChecksumError(15),
                copyNoMemory (16),
                copyUnknownFailure(17),
                复制无效签名(18)
                }
        MAX-ACCESS 只读
        状态电流     

我想做的事

一些命令将每个名称复制VARIABLE到名为的数组中var

所以输出的例子

回声“${var[0]}
复制操作待处理

回声“${var[1]}
复制进度

回声“${var[2]}
复制操作成功

等等..

任何想法我怎么能做到这一点?

注意这是一个类似的问题,我之前问过一些事情发生了什么变化,我不能再使用旧问题中提供的相同解决方案。

hee*_*ayl 6

使用grep

mapfile -t var < <(grep -Po '^\s+\K[^ ]+(?= ?\(\d+\),?$)' file.txt)
Run Code Online (Sandbox Code Playgroud)
  • grep -P 将使用 PCRE(Perl 兼容正则表达式)

  • grep -o 将打印该行的匹配部分

  • ^\s+\K将匹配以空格开头的行并\K丢弃匹配

  • [^ ]+ 将匹配我们想要的部分

  • (?= *\(\d+\))是零宽度正前瞻模式,确保零或一个空格后跟(,一位或多位数字,)以及,在我们想要的匹配后的末尾零或一个

  • mapfile 是一个内置的shell,用于创建数组。

    $ mapfile -t var < <(grep -Po '^\s+\K[^ ]+(?= ?\(\d+\),?$)' file.txt)
    
    $ echo "${var[0]}"
    copyOperationPending
    
    $ echo "${var[1]}"
    copyInProgress
    
    $ echo "${#var[@]}"
    19
    
    Run Code Online (Sandbox Code Playgroud)