我有一组正则表达式,应该针对空格分隔列表中的每个项目进行测试。
我希望这些项目能够在其中包含可以转义的空格。所以:
abc def\ ghi jkl abc
由 4 个项目组成,
abc
、 def ghi
、 jkl
和 abc
。如果我的一组正则表达式是
b
k$
^g
输出应该是
abc abc
似乎
grep -f
可以让我大部分时间都在那里,但我必须处理一种处理转义空格的方法,所以我不能只执行从空格到换行符的 tr
。编辑:我想我可以使用
sed
将常规空格替换为换行符。 tr
在换行返回的路上就足够了。想知道是否有人有更好的想法。 最佳答案
我真的不明白你的物品是如何提供的。
假装它们来自神秘程序的输出,在一行中,例如,
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
警告。这迟早会打破,除非神秘总是输出像样的东西!