根据Bash中的两个单词将一个字符串剪切成一个数组

时间:2015-07-03 00:10:02

标签: arrays json bash parsing

我目前正在开发一个bash shell脚本,并且有一个类似这样的字符串:

"IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"

我试图将字符串分成两个数组,一个是前半部分,另一个是后半部分。在这种情况下,理想数组将有两个元素,

[IP ADDRESS: 12313 isjdfisafjaslfsjfasd] [IP ADDRESS: 21311 asdfafa]

有没有人有关于如何做到这一点的任何提示?我试过在网上看,但没有任何问题与这个想法太相似。

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用参数扩展/子字符串提取

#!/bin/bash

c="IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"

a=( IP${c##* IP} ) # ${c##* IP} remove everything up to 'IP' from left
b=( ${c% IP*} )    # ${c% IP*}  remove everything to first 'IP' from right

echo "a: ${a[@]}"
echo "b: ${b[@]}"

<强>输出

$ splitscript.sh
a: IP ADDRESS: 21311 asdfafa
b: IP ADDRESS: 12313 isjdfisafjaslfsjfasd
参数扩展括号中的

注意(例如${c##* IP})空格' '无需转义。

答案 1 :(得分:0)

使用Bash Pattern Matching

s="IP ADDRESS: 12313 isjdfisafjaslfsjfasd IP ADDRESS: 21311 asdfafa"
pat="(IP ADDRESS:.*)(IP ADDRESS:.*)"
[[ $s =~ $pat ]] && declare -a arr=("${BASH_REMATCH[@]:1:2}")
echo "First: ${arr[0]} Second: ${arr[1]}"

输出:

First: IP ADDRESS: 12313 isjdfisafjaslfsjfasd  Second: IP ADDRESS: 21311 asdfafa