我有一组正则表达式,应该针对空格分隔列表中的每一项进行测试。
我希望这些项目能够有空格在他们将被转义。所以:
abc def\ ghi jkl abc由4个项目组成:abc、def ghi、jkl和abc。
如果我的正则表达式集合是
b
k$
^g输出应为
abc abc看起来grep -f可以帮我解决大部分问题,但是我必须处理转义空格,所以我不能只做一个从空格到换行符的tr。
编辑:我想我可以使用sed来做一个转义空格感知的换行符替换常规空格。在换行符返回的过程中,tr就足够了。不知道有没有人有更好的主意。
发布于 2013-06-23 01:26:33
我真的不明白你的物品是怎么给的。
假装它们来自程序神秘的输出,在一行中,例如,
gniourf@somewhere$ mystery
abc def\ ghi jkl abc您可以(文件myscript):
#!/bin/bash
output=()
re=( 'b' 'k$' '^g' ) # array of your regexes
read -a a
for w in "${a[@]}"; do
for r in "${re[@]}"; do
if [[ $w =~ $r ]]; then
output+=( "${w// /\\ }" ) # replace space with backslash-space
break
fi
done
done
echo "${output[@]}"出于测试目的,我这样做:
#!/bin/bash
# file mystery
echo 'abc def\ ghi jkl abc'然后(在chmod +x mystery myscript之后):
gniourf@somewhere$ ./mystery
abc def\ ghi jkl abc
gniourf@somewhere$ ./mystery | ./myscript
abc abc注意事项。这迟早会被打破,除非神秘感总是能输出像样的东西!
发布于 2013-06-23 01:36:35
我认为它可以在bash本身中处理,而不需要任何外部实用程序。
首先将字符串放入数组中:
input=(abc 'def ghi' jkl abc)然后运行这个for循环,根据提供的regex验证您的输入:
for i in "${input[@]}"; do
for r in 'b' 'k$' '^g'; do
[[ "$i" =~ $r ]] && echo $i && break
done
done输出:
abc
abchttps://stackoverflow.com/questions/17253294
复制相似问题