我有一个字符串[u'SOMEVALUE1', u'SOMEVALUE2', u'SOMEVALUE3']
,我想解析sed命令匹配的每个元素。匹配的元素在单引号中。这是我的剧本
#!/bin/bash
ARR="[u'SOMEVALUE1', u'SOMEVALUE1', u'SOMEVALUE1']"
for id in $(sed -n "s/^.*'\(.*\)'.*$/\1/ p" <<< ${ARR});
do
echo "$id"
done
我只有第一个返回的值。
答案 0 :(得分:1)
通配符.*
将匹配最长的最可能的字符串。如果您打算匹配单引号中的各个子字符串,请尝试
grep -o "'[^']*'" <<<"$ARR"
要删除值周围的单引号,只需将其引至sed "s/'//g"
并遍历由管道打印的行,请执行
... commands ... |
while read -r id; do
: things with "$id"
done
答案 1 :(得分:1)
BASH可以在=~
的帮助下匹配正则表达式(请参见man bash)。多次匹配有点麻烦,但是在您的情况下,我们可以在空白处分割输入,然后对每个项目进行一次匹配:
ARR="[u'SOMEVALUE1', u'SOMEVALUE1', u'SOMEVALUE1']"
for A in $ARR
do
[[ $A =~ u\'(.+)\' ]] && echo ${BASH_REMATCH[1]}
done
结果
SOMEVALUE1
SOMEVALUE1
SOMEVALUE1
答案 2 :(得分:0)
这是您要做什么吗?
$ ARR="[u'SOMEVALUE1', u'SOMEVALUE1', u'SOMEVALUE1']"
$ awk -v RS="'" '!(NR%2)' <<< "$ARR"
SOMEVALUE1
SOMEVALUE1
SOMEVALUE1
$ awk -v RS="'" '!(NR%2)' <<< "$ARR" |
while IFS= read -r id; do echo "id=$id"; done
id=SOMEVALUE1
id=SOMEVALUE1
id=SOMEVALUE1