linux - Bash编程快速搜索和提取方法

标签 linux bash

我有一个很长的多行字符串,可能包含超过 1300 个单词。

编辑:我想从字符串中搜索并提取大约两个值,并将其存储到一个变量中以进行格式化和其他处理。

我可以将字符串转换为数组并循环行并通过以下方式搜索每一行

while read -r line; do
            arr+=("$line")
    done <<< "$ACSCH"

    for i in "${arr[@]}"
    do
            if [[ "$i" =~ "level 1: src="(.*)$ ]]; then
                    SRC=${BASH_REMATCH[1]}
            fi
            if [[ "$i" =~ "level 1: dst="(.*)$ ]]; then
                    DST=${BASH_REMATCH[1]}
            fi
    done

我知道我也可以通过以下方式搜索字符串:

if [[ "$ACSCH" =~ "src="([[:alnum:]]*) ]]; then
    SRC=${BASH_REMATCH[1]}
fi

但我不知道如何搜索附加变量

我能想到的唯一方法就是在整个字符串上搜索另一种方法

if [[ "$ACSCH" =~ "DST="([[:alnum:]]*) ]]; then
    DST=${BASH_REMATCH[1]}
fi

这是正确的方法还是有更好的方法?

哪种方式会更快;进入一个循环并在每一行中搜索我的变量、我的其他方法或我目前还不知道的其他方法,这就是我在这里寻求帮助的原因。

**编辑: 输入示例:....... src=19r4345e3e dst=1kje3dkj35 之间的一些其他文本 未知长度的其余文本

示例输出:SRC=19r4345e3e |夏令时=1kje3dkj35

然后我可以进一步处理我的 SRC 和 DST 变量。**

谢谢! --E

最佳答案

当你想查找字符串“word1”、“word2”、“string with spaces and word3”和“word4”时,你可以使用:

echo "$ACSCH" | grep -Eo "word1|word2|string with spaces and word3|word4"

当您有更多单词要查找时,请考虑使用 grep 选项 -f

关于linux - Bash编程快速搜索和提取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36188307/

相关文章:

linux - 为什么在 Linux 中将文件从目录 1 move 到目录 2 时出错?

linux - pdftotext 在 linux 和 windows 上有不同的版本

linux - 比较文本文件中存在的分数值并根据标准输出它

c - 使用 C 参数运行 shell 脚本的安全方法,工作示例

linux - 在 Bash 脚本中定义和调用多个项目

linux - 使用 perl 更新 Conf 文件

java - 从 Runtime.getRuntime().exec(command) 运行的外部进程从哪里获取内存?

linux - Docker 容器内的操作系统软件?

json - bash:遍历由索引选择的 JSON 数组的成员

linux - Sed 从文件底部开始搜索和追加