我有一个像
这样的字符串string = ionworldionfriendsionPeople
如何根据模式离子将其拆分并存储到数组中
array[0]=ionworld
array[1]=ionfriends
array[2]=ionPeople
我尝试了IFS,但我无法正确分割。任何人都可以帮忙解决这个问题。
编辑: 我试过了
test=ionworldionfriendsionPeople
IFS='ion' read -ra array <<< "$test"
此外,我的字符串有时可能包含
之类的空格string = ionwo rldionfri endsionPeo ple
答案 0 :(得分:3)
您可以使用一些POSIX参数扩展运算符以相反的顺序构建数组。
foo=ionworldionfriendsionPeople
tmp="$foo"
while [[ -n $tmp ]]; do
# tail is set to the result of dropping the shortest suffix
# matching ion*
tail=${tmp%ion*}
# Drop everything from tmp matching the tail, then prepend
# the result to the array
array=("${tmp#$tail}" "${array[@]}")
# Repeat with the tail, until its empty
tmp="$tail"
done
结果是
$ printf '%s\n' "${array[@]}"
ionworld
ionfriends
ionPeople
答案 1 :(得分:1)
将grep -oP
与前瞻性正则表达式:
s='ionworldionfriendsionPeople'
grep -oP 'ion.*?(?=ion|$)' <<< "$s"
会给出输出:
ionworld
ionfriends
ionPeople
填充数组:
arr=()
while read -r; do
arr+=("$REPLY")
done < <(grep -oP 'ion.*?(?=ion|$)' <<< "$s")
检查数组内容:
declare -p arr
declare -a arr='([0]="ionworld" [1]="ionfriends" [2]="ionPeople")'
如果您的grep
不支持-P
(PCRE),那么您可以使用此gnu-awk:
awk -v RS='ion' 'RT{p=RT} $1!=""{print p $1}' <<< "$s"
<强>输出:强>
ionworld
ionfriends
ionPeople
答案 2 :(得分:1)
如果输入字符串从不包含空格,则可以使用参数扩展:
@DiscriminatorValue
如果字符串包含空格,请找到另一个字符并使用它:
#! /bin/bash
string=ionworldionfriendsionPeople
array=(${string//ion/ })
for m in "${array[@]}" ; do
echo ion"$m"
done
但是你需要跳过数组中第一个空的元素。
答案 3 :(得分:1)
$arr = array(
"a",
"1.34.163.57",
"1.64.131.242",
"1.123.153.166",
"1.209.122.55"
);
echo (in_array('1.34.163.57', $arr)) ? "YES" : "NO";