微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – bash(可以使用perl / python):通过正则表达式过滤空格分隔的arg列表

我有一组正则表达式,应该针对空格分隔列表中的每个项目进行测试.

我希望这些项目能够在其中包含将被转义的空格.所以:

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] 举报,一经查实,本站将立刻删除。

相关推荐