Arrays 在bash中从数组/字符串中删除纯数字元素

Arrays 在bash中从数组/字符串中删除纯数字元素,arrays,bash,element,Arrays,Bash,Element,在bash中,我无法从字符串/数组中删除纯数字元素(转换很容易)。诀窍是,在数组中,我有包含数字和其他字符的元素,我想保留它们 所以 VAR="a2b a22 12b 417 900 600 86400 3600" 输出应该是 "a2b a22 12b" 我能去的最远的地方是: echo ${VAR}# | sed 's/ [0-9][0-9]*[$ ]/ /g' 但它仍然不能解决问题。我尝试在数组中执行此操作,但如果没有“$”和“^”,我无法阻止删除“好元素”的某些部分 有人能帮我吗

在bash中,我无法从字符串/数组中删除纯数字元素(转换很容易)。诀窍是,在数组中,我有包含数字和其他字符的元素,我想保留它们

所以

VAR="a2b a22 12b  417 900 600 86400 3600"
输出应该是

"a2b a22 12b"
我能去的最远的地方是:

echo ${VAR}# |  sed 's/ [0-9][0-9]*[$ ]/ /g'
但它仍然不能解决问题。我尝试在数组中执行此操作,但如果没有“$”和“^”,我无法阻止删除“好元素”的某些部分


有人能帮我吗?

您的代码有两个问题。一个是,
[$]
将匹配一个字面上的美元符号,但正如人们所希望的那样,它与行尾不匹配。另一个是,虽然
g
表示全局匹配,但不允许匹配重叠,这是它按您的需要工作所必需的

如果您有GNU
sed
,那么一个简单的解决方案是避免匹配空格,而是使用
\
来标记单词边界:

$ echo ${VAR} |  sed -E 's/\<[0-9][0-9]*\>/ /g'
a2b a22 12b     
代码
:a
表示标签。代码
t a
表示测试。如果前面的替换命令确实进行了替换,则
sed
跳到标签
a


(以上是在GNU sed下测试的。它应该与BSD/OSX sed一起工作,只需稍作调整。)

我想不出比这个更好的例子来指出扩展正则表达式中边界的好处。如果您的所有数字序列始终遵循混合序列,您可以使用常规正则表达式
sed的s/[^a-zA-Z][^a-zA-Z]*$/'
,但要了解一般解决方案,请参见下面John的答案。
$ echo ${VAR} |  sed 's/^[0-9][0-9]* / /; :a; s/ [0-9][0-9]* / /g; t a; s/ [0-9][0-9]*$/ /'
a2b a22 12b