首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多行祝贺-这个表达式有什么问题吗?

多行祝贺-这个表达式有什么问题吗?
EN

Unix & Linux用户
提问于 2017-02-18 22:30:50
回答 1查看 5K关注 0票数 6

考虑这个示例文件(行号仅供参考):

代码语言:javascript
复制
1 Reference duiarneutdigane uditraenturida enudtiar.
2
3 Reference uiae uiaetrtdnsu iatdne uiatrdenu diaren uidtae
4 on line 23.
5
6 uiae
7
8 uaiernd Reference uriadne udtiraeb unledut iaeru uilaedr
9 uiarnde line 234.

我希望匹配每一个字符串,以“引用”开头,以句点结尾(即,ll )。1、3-4和8-9)使用这个grep命令(tst是示例文件):

grep -P '(?s)Reference.*?\.' tst

但是,它只匹配第一行。我当时在想:

  • (?s),因此.匹配所有字符,包括换行符。
  • .*?应该使星星不贪婪,所以如果它以句点结束,它就不匹配整个文件。
  • 表达式应该以文本句点\.结尾。

我也尝试过awk和grep的-z标志,但无论是每行还是不是所有行都匹配我的表达式。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2017-02-18 23:16:09

你可以用这个:

代码语言:javascript
复制
grep -Pzo '(?s)Reference.*?\.' tst.txt

其中tst.txt是您的输入文件。它和你的一样,但是有两个新的标志。

我添加了-z标志来抑制行尾的换行符,将其替换为null字符。因此,grep知道行尾在哪里,但将输入看作一行。

-o标志意味着它只打印匹配的部分。

我得到了以下输出:

代码语言:javascript
复制
Reference duiarneutdigane uditraenturida enudtiar.
Reference uiae uiaetrtdnsu iatdne uiatrdenu diaren uidtae
on line 23.
Reference uriadne udtiraeb unledut iaeru uilaedr
uiarnde line 234.
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/346026

复制
相关文章

相似问题

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