我有一组正则表达式,应该针对空格分隔列表中的每个项目进行测试.
我希望这些项目能够在其中包含将被转义的空格.所以:
abc def\ ghi jkl abc
由4个项目组成,abc,def ghi,jkl和abc.
如果我的一套正则表达式是
b
k$
^g
输出应该是
abc abc
似乎grep -f可以让我在那里大部分时间,但我必须处理一个处理转义空间的方法,所以我不能只是从空间到换行符.
编辑:我想我可以使用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之后神秘的myscript):
gnIoUrf@somewhere$./mystery
abc def\ ghi jkl abc
gnIoUrf@somewhere$./mystery | ./myscript
abc abc
警告.这迟早会破裂,除非神秘总是输出不错的东西!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。