加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 22:54:55 所属栏目:Linux 来源:网络整理
导读:我有一组正则表达式,应该针对空格分隔列表中的每个项目进行测试. 我希望这些项目能够在其中包含将被转义的空格.所以: abc def ghi jkl abc 由4个项目组成,abc,def ghi,jkl和abc. 如果我的一套正则表达式是 bk$^g 输出应该是 abc abc 似乎grep -f可以让我在
我有一组正则表达式,应该针对空格分隔列表中的每个项目进行测试.

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

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

警告.这迟早会破裂,除非神秘总是输出不错的东西!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读