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]} 复制操作成功 等等..
任何想法我怎么能做到这一点?
注意这是一个类似的问题,我之前问过一些事情发生了什么变化,我不能再使用旧问题中提供的相同解决方案。
使用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)