首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pcregrep -M搜索多行字符串

使用pcregrep -M搜索多行字符串
EN

Stack Overflow用户
提问于 2014-07-02 06:59:00
回答 1查看 6K关注 0票数 3

我正在尝试使用pcregrep -M来搜索多行字符串。

下面是我的脚本中的这一行:

代码语言:javascript
复制
lineNumber=$(pcregrep -Mn '$firstLine.*\n.*$secondLine.*' $myFile)

myFile包含表单的多行:

代码语言:javascript
复制
firstLine\n  
secondLine(with other characters here that I don't need to match)

我得到了lineNumber的空字符串,仅此而已。

我做错了什么?

返回值应该是什么?-n不应该给我行号吗?如果是,是哪一行,第一行还是第二行?

我应该使用awk还是sed,如果是这样,该如何使用呢?

EN

回答 1

Stack Overflow用户

发布于 2014-07-02 10:02:59

首先,需要一个有效的正则表达式。如果我正确理解了您的要求,这将会起作用:

代码语言:javascript
复制
pcregrep -Mn '^firstLine.*\n^secondLine'  myFile

请注意,此命令打印的不仅仅是行号。根据pcregrep手册页,它还打印匹配的行。

如果只想打印起始行号,请尝试:

代码语言:javascript
复制
sed -n '/^firstLine/=' myFile

正则表达式/^firstLine/选择第一行,命令=告诉sed打印行号。

要仅打印结束行号,请执行以下操作:

代码语言:javascript
复制
sed -n '/^secondLine/=' myFile

要获取两者之间的任何行,请执行以下操作:

代码语言:javascript
复制
sed -n '/^firstLine/,/^secondLine/=' myFile

也可以使用awk。线路选择类似。打印行号的命令不同。例如:

代码语言:javascript
复制
awk '/^firstLine/ {print NR}' myFile

将行号捕获到一个变量中

可以使用命令替换将行号捕获到变量中:

代码语言:javascript
复制
lineNumber=$(awk '/^firstLine/ {print NR}' myFile)

但是,如果有两个或更多行号,这可能对您没有用处。在这种情况下,如果您使用支持数组的shell,例如bash,您可能更喜欢将行号捕获到一个数组中,如下所示:

代码语言:javascript
复制
lineNumbers=($(awk '/^firstLine/ {print NR}' myFile))

如果您不熟悉数组,请注意,诸如echo $lineNumbers之类的语句不会显示整个数组,而只显示它的第一个元素。要查看整个数组,请运行:

代码语言:javascript
复制
declare -p lineNumbers
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24520428

复制
相关文章

相似问题

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