从bash中的数组/字符串中删除仅限数字的元素

时间:2016-05-03 22:32:36

标签: 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'

但它仍然没有解决问题。我尝试在一个数组中完成它,但没有" $"和" ^"我无法阻止删除"好元素的某些部分"。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

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

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

$ echo ${VAR} |  sed -E 's/\<[0-9][0-9]*\>/ /g'
a2b a22 12b     

或者,如果没有GNU扩展,您可以使用循环:

$ 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 

代码:a表示标签。代码t a表示测试。如果前一个替换命令确实进行了替换,那么sed会跳转到标签a

(以上是在GNU sed下测试的。它应该与BSD / OSX sed配合使用,只需稍作调整。)