首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用=~匹配到bash regex中的行尾

使用=~匹配到bash regex中的行尾
EN

Stack Overflow用户
提问于 2020-09-27 04:20:03
回答 2查看 596关注 0票数 3

我正在尝试使用bash正则表达式匹配来解析多行字符串中的一行。为什么以下选项不起作用?

代码语言:javascript
复制
if [[ $qout =~ ${q}[^\n]* ]] ; then

它与字母n相匹配。我尝试过使用\\n甚至\\\n,但都不起作用。

$qout包含:

代码语言:javascript
复制
unrouted    0   0   running
dead-letter 0   0   running

$q包含unrouted

${BASH_REMATCH[0]的评估结果为:

代码语言:javascript
复制
unrouted    0   0   ru

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2020-09-27 04:58:15

[\n]不匹配换行符--它匹配文字反斜杠或n。如果您运行nl=$'\n',然后使用$nl作为您的正则表达式,事情将按预期工作。

代码语言:javascript
复制
#!/usr/bin/env bash
qout='unrouted    0   0   running
dead-letter 0   0   running'

q=unrouted

nl=$'\n'
if [[ $qout =~ ${q}[^$nl]*[$nl] ]]; then
  declare -p BASH_REMATCH
else
  echo "No match found" >&2
fi

...emits作为输出:

代码语言:javascript
复制
declare -ar BASH_REMATCH=([0]=$'unrouted    0   0   running\n')
票数 3
EN

Stack Overflow用户

发布于 2020-09-27 04:51:05

假设:

从多行变量(

  • qout)中提取包含模式模式的行(从模式(q)到行尾(要在${BASH_REMATCH[0]})

中捕获))

对多行变量稍作修改:

代码语言:javascript
复制
$ echo ${qout)
this is unrouted    0   0   running
dead-letter    0   0   running

注释:我在第一行添加了'this is‘前缀,这样我们就可以验证解析从哪里开始。

一个想法-借用这个答案(shell regex to end of line):

代码语言:javascript
复制
$ sfx=$'[^\n]*'                  # match up to first newline (`\n`) character;
                                 # must use single quotes;
                                 # double quotes will cause the `\n` to be evaluated as the character `n`

$ [[ $qout =~ ${q}${sfx} ]] && echo 'match'
match
$ echo "${BASH_REMATCH[0]}"
unrouted    0   0   running

FWIW,将测试/echo包装在set -/+ xv中显示:

代码语言:javascript
复制
$ [[ $qout =~ ${q}${sfx} ]] && echo 'match'
+ [[ this is unrouted    0   0   running
dead-letter    0   0   running =~ unrouted[^
]* ]]
+ echo match
match

将@David C.Rankin的评论添加到混合中(将\n直接放在正则表达式中):

代码语言:javascript
复制
$ [[ $qout =~ ${q}[^$'\n']* ]] && echo 'match'
match
$ echo "${BASH_REMATCH[0]}"
unrouted    0   0   running

备注:如果大卫想发布他自己的答案,我可以删除它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64082165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档