有没有一种方法可以在bash中的特定子字符串之后提取子字符串?

时间:2019-12-27 15:36:01

标签: regex string bash awk split

我每天早上从我的一位工程师那里收到一个.txt文件,其中包含以下信息:

/

我们有一个运行的脚本,可以通过提供指定的source-group或dest-group向我们返回类似于以下的信息:

"New York"|NYC|network-details source-group NYC-srcIP dest-group NYC-destIP

"San Francisco"|SF|network-details source-group SF-srcIP dest-group SF-destIP

我遇到的主要问题是要处理大量数据并解析.txt文件中的字符串,因此我可以运行脚本并将其附加到2个不同的文件中,以获取源组和目标-所有这些位置的组。

但是.txt具有多个定界符。本质上,我只想要源组值(例如:NYC-srcIP)和目标组值(例如:NYC-destIP)。

有没有一种简便的方法可以在bash中做到这一点?最好是pythonic,在哪里可以获取.txt文件中每一行的source-group和dest-group之后的第一个以空格分隔的子字符串?

2 个答案:

答案 0 :(得分:0)

基本剪切/ awk应该足以满足此要求,例如:

cat ex.txt | sed 's/".*"//' | awk '{print $3,$5}'

cat ex.txt | sed 's/".*"//' | cut -d' ' -f3,5

sed有助于消除双引号中的第一部分,双引号中可能包含空格,如注释中所指出。

答案 1 :(得分:0)

bash版本:

pattern="source-group ([^[:space:]]+) dest-group ([^[:space:]]+)"
while read line; do
    if  [[ $line =~ $pattern ]]; then
        echo ${BASH_REMATCH[1]} ${BASH_REMATCH[2]}
    fi
done

bash test.sh <输入